Клонирование объектов в PHP5
02.05.2008
В отличие от обычных переменных присвоение объекта происходит по ссылке. Так как исходный и присваиваемый объекты являются одним объектом, то изменение одного тут же отражается на состоянии другого, что может привести к ряду ошибок.
Подход присвоения объекта по ссылке оправдан, например, в случае передачи объектов в качестве параметра функций, так как он позволяет существенно снизить связанные с передачей объектов затраты памяти.
Также часто необходимо производить присвоение объектов посредством создания копии. В 5й версии PHP был введен специальный метод класса - __clone (), который возвращает копию объекта. Ниже представлен пример использования данного метода:
class TEST {
public $test_var;
}
$first_obj = new TEST;
$second_obj = new TEST;
$first_obj->test_var = 'value 1';
$second_obj = $first_obj->__clone();
$second_obj->test_var = 'enother value';
echo $first_obj->test_var, '<br />', $second_obj->test_var;
/* В результате выполнения получим:
value 1
enother value
*/
После использования метода __clone () - копия и оригинальный объект являются независимыми. Вышеописанный метод может быть перегружен в случае необходимости. Для получения доступа к переменным клона используют конструкцию $that->.
Tags: PHP, ООП
Оставить комментарий