对象复制的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();

你可能感兴趣的:(对象)