Клонирование объекта в PHP
Опубликовано: 06.09.2018
Оператор присваивания "=" не создаёт новую копию объекта и старый и новый объект указывают на одну и туже область памяти.
Продемонстрируем операцию присвоения одного объекта класса "classes_work" другому. При этом изменение члена класса нового объекта "$_class_new" будет отражаться на старом объекте "$classes_work".
Пример присвоения:
class classes_work { public $_work_variable; public function __construct () { $this->_work_variable = 10; } } $classes_work = new classes_work(); echo $classes_work->_work_variable; // Присвоение одного объекта другому приводит не к созданию новой копии, а к получению текущим объектом дополнительного псевдонима $_class_new = $classes_work; $_class_new->_work_variable = 200; echo $classes_work->_work_variable; echo $_class_new->_work_variable;Клонирование - это создание копии текущего объекта, которая выполняется с помощью специального слова "clone", которое располагается непосредственно перед клонируемым объектом.
Что такое геттеры и сеттеры для класса. Методы get и set. Инкапсуляция это. Пример. C++ Урок #76
class classes_work { public $_work_variable; public function __construct () { $this->_work_variable = 10; } } $classes_work = new classes_work(); // Получение независимой копии объекта посредством клонирования $_class_new = clone $classes_work; $_class_new->_work_variable = 200; echo $classes_work->_work_variable; // Результат: 10 echo $_class_new->_work_variable; // Результат: 200
Оператор присваивания "=" не единственный способ создания псевдонима объекта. Псевдоним объекта можно создать при передачи самого объекта во внутрь функции. Массивы и объекты передаются во внутрь функции по ссылке в отличии от переменных которые передаются по значению. Это означает, что изменения, произведённые над объектом внутри функции, отражаются на объекте после выполнения функции.
Копирование динамического массива c++. Скопировать массив с++. С++ Для начинающих. Урок #58
Пример передачи объекта по ссылке в функцию:
class classes_work { public $_work_variable; public function __construct () { $this->_work_variable = 10; } } $classes_work = new classes_work(); function testfunc ($classes_work) { $classes_work->_work_variable = 'Принято значение созданное в функции "testfunc"'; } testfunc ($classes_work); echo $classes_work->_work_variable; // Результат: "Принято значение созданное в функции "testfunc"".Для того чтобы передать объект по значению, как другую переменную, следует при вызове функции написать перед объектом слово "clone".
class classes_work { public $_work_variable; public function __construct () { $this->_work_variable = 10; } } $classes_work = new classes_work(); function testfunc ($classes_work) { echo $classes_work->_work_variable = 'Создана копия объекта "$classes_work"<br>'; } testfunc (clone $classes_work); echo $classes_work->_work_variable; // Результат: 10.В примере внутрь функции передаётся не сам объект "$classes_work", а его копия, поэтому изменения, которые производятся над объектом, не отражаются на объекте в основной программе.
2577