php引用
. php中引用的用法:
-
变量的引用赋值: $a = &$b
-
函数调用时的引用参数传递
-
早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
-
后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
-
注:引用声明时定义引用类型参数后,运行时引用参数传递被废弃,需要在php.ini中增加allow_call_time_pass_reference来开启.
##1..函数返回引用类型, 这种应用方式需要声明函数时,在函数名前增加&符号,并且,在调用时,要用引用赋值方式 , 实例代码如下:
dmeo1
function &func() {
return $a;
}
$a = func(); //这种调用方式得到的不是引用传值
$a =& func(); //这样调用才是引用传值
简而言之,就是让函数的返回一个引用类型的值,一个更实际的例子,代码如下:
demo2
$a = 1;
function &func(&$a) {
return $a;
}
$b = func($a);
$c =& func($a);
$b = 2;
echo $a;
echo $b;
echo $c;
//输出a: 1, b: 2, c: 1.
//可见对$b的修改不会影响$a
demo3
$c = 3;
echo "a: $a, b: $b, c: $c. <br />/n";
//输出a: 3, b: 2, c: 3.
//可见对$c的修改会影响$a
php函数传值的几个细节,如下:
##2. 基本数据类型的传值
demo1
function testvar($k){
$k = 40;
}
$c = 30;
//给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的就是值 ;
testvar($c); //变量复制一份传到函数中
echo $c;//结果是:30
demo2
function testvar2(&$k){
$k = 40;
}
$e = 30;
//给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的y就是地址(把地址传过去了) ;
//外部变量的地址传递进函数里面去了,里面的改变影响外面的改变
testvar2($e);
echo $e;//结果是:40
##3 数组(默认情况下是复制一份数据),如要传地址则&$arr.
demo1
$arr1 = array(-1,5,0);
function testArr($arr){
for($i=0;$i<count ($arr);$i++){
for($j=$i+1;$j<count($arr);$j++){
if($arr[$i]>$arr[$j]){
$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 ) //数组没有改变
dmeo2
function testArr2(&$arr){ //传进来的是引用地址,内部会改变外部的
for($i=0;$i</count><count ($arr);$i++){
for($j=$i+1;$j<count($arr);$j++){
if($arr[$i]>$arr[$j]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
}
testArr($arr1);
print_r($arr1); //结果:Array ( [0] => -1 [1] => 0 [2] => 5 )
4 对象数据类型传值
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
</count>
http://www.phpfensi.com/php/20140220/1612.html