Клонирование в ООП

dallas777

Новичок
Добрый день!
Объясните пожалуйста этот кусок кода, я не могу понять что он клонирует в свойство объекта при таком подходе:

PHP:
class Myclone{
    public $project1;
    public $project2;
   
    function __clone(){
        $this -> project1 = clone $this -> project1;
    }
}
 
Последнее редактирование:

Hello

Новичок
dallas777, в свойстве project1 находится объект, его тоже клонируют
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
то что находится в $this -> project1 будет также клонировано (не ссылка на старый $this -> project1)
 

AnrDaemon

Продвинутый новичок
Добрый день!
Объясните пожалуйста этот кусок кода, я не могу понять что он клонирует в свойство объекта при таком подходе:
Это потому, что ты не читал документацию и не знаешь, что происходит при клонировании.

When an object is cloned, PHP 5 will perform a shallow copy of all of the object's properties. Any properties that are references to other variables, will remain references.

Once the cloning is complete, if a __clone() method is defined, then the newly created object's __clone() method will be called, to allow any necessary properties that need to be changed.
PHP:
class Myclone{
    public $project1;
    public $project2;
 
    function __clone(){
        $this -> project1 = clone $this -> project1;
    }
}
У клона вызывается метод, клонирующий проперти.
 

dallas777

Новичок
Спасибо, я еще раз перечитал мануал и понял что при создании копии объекта с помощью ключевого слова clone которое вызывает метод объекта __ clone в методе производятся любые операции над свойствами объекта ))
Я правильно понял?
 

Vano

Новичок
Спасибо, я еще раз перечитал мануал и понял что при создании копии объекта с помощью ключевого слова clone которое вызывает метод объекта __ clone в методе производятся любые операции над свойствами объекта ))
Я правильно понял?
Фиг его знает правильно или нет. Функция clone просто клонирует объект, НО если в классе объекта есть "магический метод" __clone ( http://php.net/manual/ru/language.oop5.magic.php ) то после завершение клонирования вызывается этот метод уже у нового объекта. А чтобы понять, что такое объект - http://php.net/manual/ru/language.oop5.references.php
 

Vano

Новичок
То-есть, чтобы понять зачем $this -> project1 = clone $this -> project1; тебе нужно точно знать, что такое объект
 
Сверху