(PHP5) Почему присваивание работает как клонирование? Код с этой страницы php.net/manual/ru/language.oop5.basic.php из примера #4var = '$assigned будет иметь это значение';
$instance = null; // $instance и $reference становятся null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?> РезультатNULL
NULL
object(SimpleClass)#1 (1) {
["var"]=> string(30) "$assigned будет иметь это значение"
}
А есть ещё клонирование php.net/manual/ru/language.oop5.cloning.php
Я правильно понял, что клонирование без определённого в классе метода __clone() делает тоже самое, что и обычное присваивание? Я вообще ожидал в этом примере, что $assigned будет NULL, а на деле как-будто написали $assigned = clone $instance;
Так в чём же разница?

21 Авг 2019 в 07:09
184 +1
1
Ответы
1

Да, присваивание в PHP работает как клонирование только для объектов. Когда объект присваивается переменной, переменная фактически получает ссылку на объект, а не сам объект. Это означает, что изменения, внесенные в одну переменную, отразятся на другой переменной, так как они обе ссылается на один и тот же объект.

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

Если класс не имеет метода __clone(), то при клонировании объекта будет создана поверхностная копия объекта, т.е. значения всех свойств будут скопированы, но не их ссылки. Таким образом, новый объект и оригинал будут иметь разные свойства, но свойства-объекты будут ссылаться на одни и те же объекты.

В вашем примере, если бы вы использовали клонирование ($assigned = clone $instance), то $assigned содержал бы независимую копию объекта и не зависел бы от изменений в оригинальном объекте.

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

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир