【发布时间】:2013-05-29 10:32:28
【问题描述】:
我知道这在 php 文档中有介绍,但我对这个问题感到困惑。
来自 php 文档:
$instance = new SimpleClass();
$assigned = $instance;
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>
上面的例子会输出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
好的,所以我看到$assigned 幸存原来的对象($instance)被分配给null,所以很明显$assigned 不是参考,而是$instance 的副本.
那么和
有什么区别 $assigned = $instance
和
$assigned = clone $instance
【问题讨论】:
-
'$assigned will have this value'不会因为你使用'' -
@Robert 在这种情况下,“$assigned”的意思是字面上的“$assigned”,而不是值替换。
-
我今天花了几个小时处理一个棘手的错误,这是由于我不了解涉及数组和对象的赋值语句之间的极端差异。我仍然不明白为什么会有差异。这似乎是糟糕的语言设计,因为对象只是花哨的数组(具有可见性控制、固定属性列表和添加的方法)。一般来说,当我使用赋值语句时,我几乎总是想捕获右侧表达式的当前值。在我需要别名(参考)的极少数情况下,我希望在 RHS 上需要 '&' 运算符。