Ale*_*lex 5 php object pass-by-reference
如果在PHP5中通过引用传递对象,那么$foo
下面的原因不会改变?
$foo = array(1, 2, 3);
$foo = (object)$foo;
$x = $foo; // $x = &$foo makes $foo (5)!
$x = (object)array(5);
print_r($foo); // still 1,2,3
Run Code Online (Sandbox Code Playgroud)
所以:
通过引用传递与assign不同.
那么为什么$foo
以下(100, 2, 3)
呢?
$foo = array('xxx' => 1, 'yyy' => 2, 'zzz' => 3);
$foo = (object)$foo;
$x = $foo;
$x->xxx = 100;
print_r($foo);
Run Code Online (Sandbox Code Playgroud)
问题在于:
$x = $foo;
$x = (object)array(5);
Run Code Online (Sandbox Code Playgroud)
在第一个规则上,$ x引用了$ foo; 编辑$ x wil也编辑$ foo;
(这称为"按参考分配",而不是"通过引用传递"*1)
$x->myProperty= "Hi";
Run Code Online (Sandbox Code Playgroud)
将导致$ foo也有一个属性"myProperty".
但是在下一行中,您将$ x引用到new
对象.
有效地从$ foo中取消$ x,你对$ x的所有更改都不会传播到$ foo.
*1:调用函数时,传递给函数的对象是(在php5中)"通过引用传递"