__clone ()-Automatically load this method when the object is cloned
__tostring ()-Automatically loads this method when an object needs an echo print output
__clone ()
<?phpclass example{public static $PA; public $PB; Public Function __construct () { $this->PB = ++self:: $pa; } Public Function __clone () { $this->PB = ' no Zuo no die '; }} $a = new example; $b = new example; $c = Clone $b; $b->pb = ' I love your so much! '; echo $a->pb;echo '
The results are as follows
1------------------------------------------------------------------------------------I Love much! ------------------------------------------------------------------------------------No Zuo no die/* if there is __ Clone () This magic method, the result of this side should be 2*/-------------------------------------------------------------------------------- ----I Love much!
The PHP manual gives us an example that is somewhat difficult to read, as follows
<?phpclass subobject{ static $instances = 0; public $instance; Public Function __construct () { $this->instance = ++self:: $instances; } Public Function __clone () { $this->instance = ++self:: $instances; }} Class mycloneable{public $object 1; Public $object 2; function __clone () { //forces a copy of This->object, otherwise it still points to the same object $this->object1 = Clone $this Object1;} } $obj = new Mycloneable (), $obj->object1 = new Subobject (), $obj->object2 = new Subobject (), $obj 2 = Clone $obj;p rint ("O Riginal object:\n ");p Rint_r ($obj);p rint (" Cloned object:\n ");p Rint_r ($obj 2);? >
The final result
OriginalObject: MycloneableObject([Object1]= SubobjectObject([instance]=1) [Object2]= SubobjectObject([instance]=2)) ClonedObject: MycloneableObject([Object1]= SubobjectObject([instance]=3/ * may be more difficult to understand here, in fact, $obj2 when cloning the final instance as 2 of the result of cloning, and then execute the Subobject::__clone method * /) [Object2]= SubobjectObject([instance]=2 ))
__tostring ()
<?php//Declare A simple classclass testclass{public $foo; Public function __construct ($foo) { $this->foo = $foo; } Public Function __tostring () { return $this->foo; }} $class = new TestClass (' Hello '); Echo $class;? >
Results
Hello
PHP Magic Method __clone __tostring (v)