PHP 函数传参中传值与传址有什么区别?请举例说明

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

如题

摈弃世俗浮躁,追求技术精湛
Summer
讨论数量: 2

传值:不指向同一个内存地址
传址:指向同一个内存地址

传值

function func($num){ $num ++; }
$data = 1;
func($data); 
echo $data;// 1
// 分析: 将 $data 的值传入到 func 方法,重新开辟一个内存保存 值1 赋值给 $num,和 $data 是两个独立的内存地址,$num 改变不会影响 $data 的值

传址

function func(&$num){ $num ++; }
$data = 1;
func($data); 
echo $data;// 2
// 分析:通过 &符,将 $data 的内存地址复制给 $num,$num 和 $data 是一个内存地址,$num 改变,$data 同时改变

传址例2

function func($a, $b, &$status){
   $status = $a > $b ? 1 : 0;
}
func(3, 5, $status);
echo $status; // 0

利用传址的应用:博客:不用递归实现无限级分类

2年前 评论
JaguarJack

哈哈,其实最有用的就是不需要返回值了。

function($params) { 
      return $params; 
}

function(&$params) { 
     // todo something
}

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!