Задать вопрос
  • Оператор clone в php: как работает?

    @Arik
    Да, очень кривой пример или вы не до конца все показали. По сути свойство address хранит объект (а точнее ссылку на объект) и если просто сделать клон объекта person, то и клон будет ссылаться на объект адрес и если один объект person что-то сделает со своим объектом ($this->address) изменит часть данных, то и клон тоже обновит свой ($this->address) - вернее они ссылаются на один объект.
    Другими словами с какой-то там версии PHP на объекты лишь ссылаются и объект удаляется из памяти, когда на него никто больше не ссылается.
    Пример: сим ссылки в ФС (ярлыки), на один файл можно много ссылок сделать, но если хоть по одной ссылке кто-то изменит данные файла, то и все сим ссылки обновят контент. Поэтому если вам нужно будет изменять файл, то вы не делаете ссылку, а копируете. Тут тоже самое, если адрес могут изменить, то лучше сделать и клон объекта с адресом

    Живой пример если не сделать клон объекта адреса:
    $person = new Person();
    
    $person->address->a = 1;
    
    $personClone = clone $person;
    
    $person->address->a = 2; // обновляем через первый объект person
    
    echo $personClone->address->a; // 2 - клон тоже обновил, так как они ссылают на один объект
    Ответ написан
    Комментировать