PHP-php值传递的问题,两个例子搞不懂了

发布于 2016-11-18 14:44:34 字数 647 浏览 1404 评论 2

//第一段
<?php
$arr=array(2,1,1);
function findMin($arr){
$min=$arr[0];
$re=array();
for($i=0;$i<count($arr);$i++){
if($min>$arr[$i]){
$re[]=$i;
}
}
return $re;
}
$re=findMin($arr);
echo $re[0];
echo $re[1];

//第二段

function main() {
$cc = array(
'a','b'
);
change($cc);
var_dump($cc);
die;
}
function change($cc){
$cc = array('dd');
}
main();

?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

偏爱自由 2017-10-21 08:29:07

这个涉及到php的变量传值分为 按值传递按引用传递
php变量的
php变量的值是存放在一个叫zval的容器中(一个内存堆块中)
按值传递

$a=1;
$b=$a;
$b=2; //$b创建了与$a不同的zval容器(即copy on write),$b的zval容器放的是2. $a的容器放的是1.

按引用传递

 $a=1;
$b=&$a;//$b和$a使用了指向了相同的zval容器.
$b=2;//$b将容器的值改变成2.(实际上是change on write).$a当然也是2了.

对于你的例子.你应该改为按引用传值,change才会改变$a;

 $a = array(5);

change($a);
var_dump($a);
function change(&$arr){//按引用传参时,形参$arr与$a指向同一zval的容器
$arr = array('dd');//$arr对zval的更改会直接影响到$a
}

function change(&$arr){//按引用传参时,形参$arr与$a指向同一zval的容器
$b =2;
$arr = &$b;//$arr指向了$b的zval
$arr = array('dd');//$arr对zval的更改不会影响到$a.而会影响到$b
}

想挽留 2017-07-29 03:35:48

change传的是形参,又没return,何来的更改?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文