php函数的传值与传址(引用)详解
在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助。
php中引用的用法:
1. 变量的引用赋值: $a = &$b
2. 函数调用时的引用参数传递
1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_reference来开启.
3. 函数返回引用类型, 这种应用方式需要声明函数时, 在函数名前增加&符号, 并且, 在调用时, 要用引用赋值方式, 比如:
代码如下 | 复制代码 |
|
简而言之, 就是让函数的返回一个引用类型的值, 一个更实际的例子:
代码如下 | 复制代码 |
$a = 1; |
php函数传值的几个细节
代码如下 | 复制代码 |
//一、基本数据类型的传值 /* **************************************************** */ function testvar($k){ $k = 40; } $c = 30; //给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的就是值 ; testvar($c); echo $c;//结果是:30 function testvar2(&$k){ $k = 40; } $e = 30; //给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的y就是地址 ; testvar2($e); echo $e;//结果是:40 /* **************************************************** */ //二、数组(默认情况下是复制一份数据),如要传地址则&$arr. $arr1 = array(-1,5,0); function testArr($arr){ for($i=0;$i $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } print_r($arr); //结果:Array ( [0] => -1 [1] => 0 [2] => 5 ) } testArr($arr1); print_r($arr1); //结果:Array ( [0] => -1 [1] => 5 [2] => 0 ) function testArr2(&$arr){ for($i=0;$i $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } } testArr($arr1); print_r($arr1); //结果:Array ( [0] => -1 [1] => 0 [2] => 5 ) /* **************************************************** */ //三、对象数据类型传值 class person{ public $name; public $age; } $a = new person(); $a->name = '小明'; $a->age = '20'; //变量a在存的是对象的地址,把a赋给b这个变量,实际上就是赋了一个地址。 $b = $a; $b->age = 30; //echo $a->age.$b->age;//结果是:30 30 //给一个函数参数传一个对象, 实际上传的是这个对象的地址; function test($k){ $k->age =40; } //调用 test($b); //echo $a->age.$b->age;//结果是:40 40 |
php函数的传值与传址有什么区别呢?对于这样的问题我喜欢通过程序演示来获取答案。让我们来看一个演示记录吧!
代码如下 | 复制代码 |
$i=100; function func($n){ $n=$n+100; return $n; } echo '1)函数传值前变量$i的值:'.$i.' '; echo '2)传值后函数的返回值:'.func($i).' '; echo '3)函数传值后变量$i的值:'.$i.' '; echo '4)函数传址前变量$i的值:'.$i.' '; echo '5)传址后函数的返回值:'.func(&$i).' '; echo '6)函数传址后变量$i的值:'.$i.' '; //echo func($i).' '; ?> |
程序输出:
1)函数传值前变量$i的值:100
2)传值后函数的返回值:200
3)函数传值后变量$i的值:100
4)函数传址前变量$i的值:100
5)传址后函数的返回值:200
6)函数传址后变量$i的值:200
解释:
1)直接输出一个赋值$i=100的变量
2)func函数传值返回一个算术相加的结果$=100+100
3)func函数传值,其作用区域只限于函数内部,对外面的变量$i不会有影响
4)同上
5)func函数参数前多了个"&"符,表示传址,和2)一样,返回值是函数的算术运行结果。
6)func(&$i),变量指针指向$i的位置,可以理解为是对变量$i的操作,$i=$i+100;这时变量$i已经相当于重新被赋值
如果去掉上面代码的第18行注释,会得什么结果呢?
小结:传址为了在执行函数的同时,同时改变函数参数值,而传值不期望改变。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.
