PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么

2024-03-29 12:35:00 浏览

HP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么

传值引用的问题,在foreach

第一次带&的foreach并没有改变数组的内容。。

而是最后一次循环$value引用了数组的最后一个项 (可以测试一下,在第一次循环结束后unset($value),第二次循环的结果就不会有变化),

在你第二个foreach也是使用的$value变量,这才造成了怪异的问题(可以换个变量,比如$val,输出的数组就不会有变化)。

第二个foreach是赋值给$value,但是这时的$value是引用的数组的最后一个值,

第一次循环把one赋值给了最后一个值,

第二次把two赋值给最后一个,

第三次也就是最后一个已经在第二次循环被赋值为two,所以仍然是two。

2、引用赋值,例如$a=&$b,即$a和$b在都指向了内存中的同一个存储变量值得地址;

3、引用计数传值,在PHP和js中的对象都是默认的传值方式都是引用计数传值,例子如下:

$a=new Dog;//此时,$a指向了内存中的一个地址(假设0XFFAD[1]),该地址又指向最终对象的值

$b=$a;//此时,$b和$a都指向了内存中的另一个地址(0XFFAD[2]),该地址又指向最终对象的值

var_dump($a);//此时的结果不是int 999,而是object(Dog)[1]

由此可以看出对象的传值方式跟第二种引用传值是有点区别的。

在PHP中,函数的参数可以通过值传递或引用传递来进行赋值。值传递是指将参数的值复制一份传递给函数,在函数中对参数进行修改不会影响原始变量的值。而引用传递是指将参数的内存地址传递给函数,函数中对参数进行修改会直接影响原始变量的值。在函数定义中,可以使用&符号来表示参数是引用传递。例如:function foo(&$bar) {} 表示$bar是引用传递的参数。在调用函数时,可以使用变量名或字面量来传递参数。例如:foo($x) 或 foo(5)。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。