对象复制的2种方式区别

     PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval(PHP4中对象和一般变量一样存储于Zval)

    在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给一个函数时,我们不需要复制数据。仅仅保持相同的对象指针并由另一个zval通知现在这个特定的对象指向的Object Store。由于对象本身位于Object Store,我们对它所作的任何改变将影响到所有持有该对象指针的zval结构----表现在程序中就是目标对象的任何改变都会影响到源对象。这使PHP对象看起来就像总是通过引用(reference)来传递,因此PHP5中对象默认为通过“引用”传递,不再需要像在PHP4中那样使用&来声明

 

class one{

        public $name;

 

        function __construct($name){

            $this->name = $name;

        }

 

        public function demo(){

            echo $this->name;

        }

 

        public function setName($newName){

            $this->name = $newName;

        }

 

        function __clone(){

            $this->name = "HAHA";

        }

 

    }

 

    $a = new one('ajia');

    //$b = $a;         //对象复制是引用复制,会互相影响

    $b = clone $a; //__clone方式的对象复制就不会互相影响

    $a->setName('youxi');

    //$b->setName('123');

    $b->demo();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值