当使用对象时,需要警惕在这个问题上犯错,那就是对象和简单变量类型表现大相径庭。
例子:
class Parcel{
public $dest;}
$box1 = new Parcel();
$box1->dest = 'Denmark';
$box2 = $box1;
$box2->dest = 'Brazil';
if($box1 == $box2){
echo '对象相同';
}
if($box1 === $box2){
echo '存储在相同的位置';
}
结果: 对象相同,且存储在相同的位置
现在的情况是:当将$box1赋值给$box2时,并没有复制的内容。相反,PHP使用了另一种方式将$box2指向同一个对象。我们称其为引用(reference)。
对象总是通过引用传递。对象会提供一个指向自己的引用,而不是复制自己的一个副本。这意味着如果一个函数对传入的一个对象进行操作时,没有必要从函数中返回。这种变化会在对象的原始副本上反映出来。
如果需要为一个已经存在的对象复制一个单独的副本,可以使用clone这个关键字来创建。
参考资料:《PHP精粹 编写高效PHP代码》