Ответы пользователя по тегу PHP
  • Оператор clone в php: как работает?

    Если разобраться, то все просто.

    Метод __clone, как уже писали ранее, вызывается ПОСЛЕ клонирования объекта. До его вызова php создает "поверхностную" копию объекта. Это значит, что если в одном из свойств клонируемого объекта хранится другой объект, то php копирует в новый объект его ссылку. После этой операции $original->address и $clone->address указывают на один и тот же объект. (пример кода ниже).

    Если нам нужно клонировать какое-то свойство-объект, то мы можем сделать это в методе __clone. Мне привычнее воспринимать его как коллбэк. В этом методе $this - это клон (новый объект).

    Теперь вспомним то, что php при присваивании выполняет сначала ПРАВУЮ часть операции, а затем левую.
    В данном случае это значит: "Эй, интерпретатор, возьми и клонируй то, что лежит у меня в поле adress, потом возьми ссылку на этот объект, и запиши мне в поле address"

    class Person {
      public function __clone() {
        $this->address = clone $this->address;
      }
    }
    
    $original = new Person();
    $clone = clone $original;
    Ответ написан
    Комментировать