【发布时间】:2011-09-04 02:59:54
【问题描述】:
如果在 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
所以:
引用传递不一样 分配。
那为什么下面的$foo 是(100, 2, 3)?
$foo = array('xxx' => 1, 'yyy' => 2, 'zzz' => 3);
$foo = (object)$foo;
$x = $foo;
$x->xxx = 100;
print_r($foo);
【问题讨论】:
-
还有,这不是很混乱吗?我的意思是我不认为将对象分配给变量的人期望对象会改变......除非他们真的知道 PHP 会这样做......
-
再一次:“通过引用传递”通常意味着通过某个地方。这只是常用词。 Tomalak 已经解释过——在第一种情况下,我们有一个副本。
-
对象的引用分配是非常混乱的!一个演员给你一个新的对象不是。
-
Alex,在 PHP 中,没有什么是永远通过引用传递(或通过引用分配),除非 PHP 被告知这样做。对象以 reference-like 方式处理(因为 object 的 zvals 只存储对对象数据的引用),但绝不是真正的引用。
标签: php object pass-by-reference