PHP引用传值

php引用

. php中引用的用法:

  1. 变量的引用赋值: $a = &$b

  2. 函数调用时的引用参数传递

    1. 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);

    2. 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: 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

转载于:https://my.oschina.net/oneboi/blog/757982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值