PHP的对象和引用(写时复制)

当使用对象时,需要警惕在这个问题上犯错,那就是对象和简单变量类型表现大相径庭。

例子:

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代码》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值