標籤:style blog color io ar div cti sp log
<?phpclass Account { public $balance; public function __construct($balance) { $this->balance = $balance; }}class Person { private $id; private $name; private $age; public $account; public function __construct($name, $age, Account $account) { $this->name = $name; $this->age = $age; $this->account = $account; } public function setId($id) { $this->id = $id; } public function __clone() { //複製方法,可在裡面定義再clone是進行的操作 $this->id = 0; $this->account = clone $this->account; //不加這一句,account在clone是會只被複製引用,其中一個account的balance被修改另一個也同樣會被修改 }}$person = new Person("peter", 15, new Account(1000));$person->setId(1);$person2 = clone $person;$person2->account->balance = 250;echo ‘<pre>‘;var_dump($person, $person2);?>
結果
object(Person)#1 (4) { ["id":"Person":private]=> int(1) ["name":"Person":private]=> string(5) "peter" ["age":"Person":private]=> int(15) ["account"]=> object(Account)#2 (1) { ["balance"]=> int(1000) }}object(Person)#3 (4) { ["id":"Person":private]=> int(0) ["name":"Person":private]=> string(5) "peter" ["age":"Person":private]=> int(15) ["account"]=> object(Account)#4 (1) { ["balance"]=> int(250) }}
php __clone實現