Страница 7 из 20 Клонирование объектов В PHP4 для клонирования объекта достаточно было простой операции $clonedObject = $object. Все свойства обекта $object просто копировались в объект $clonedObject. Изменить алгоритм клоирования можно было написав собственный метод для этого. В PHP5 для этого метода ввели специальное имя __clone и упростили доступ к созданному объекту. Для обращения к новому объекту используется $this, для обращения к уже существующему (чей клон делается), соответственно, $that. Если метода __clone нет, то вызовется стандартный метод, копирующий все свойства объекта. На примере это выглядит так: class Node { private $next; private $name; function __clone() { $this->name = $that->name; $this->next = null; } function setName($name) { $this->name = $name; } function getName() { return $this->name; } function setNext(Node $next) { $this->next = $next; } } $n1 = new Node(); $n1->setName('Node1'); $n2 = new Node(); $n2->setName('Node2'); $n1->setNext($n2); $n = $n2->__clone(); print_r($n); В примере рассматривается класс для создания списка, т.е. цепочки объектов, в которой каждый объект сожержит указатель на следующий. При этом можно получить клон любого объекта в цепочке, и новый объект будет "вынутым" из цепочки (не содержать ссылки на следующий объект). Пример также демонстрирует, что к можно внутри метода __clone можно получить доступ к private переменным объектов $this и $that. |