HP中的&传值引用的问题,在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)。