В отличие от обычных переменных присвоение объекта происходит по ссылке. Так как исходный и присваиваемый объекты являются одним объектом, то изменение одного тут же отражается на состоянии другого, что может привести к ряду ошибок.

Подход присвоения объекта по ссылке оправдан, например, в случае передачи объектов в качестве параметра функций, так как он позволяет существенно снизить связанные с передачей объектов затраты памяти.

Также часто необходимо производить присвоение объектов посредством создания копии.  В 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: ,
Share  

Оставить комментарий