Использование __clone в PHP?

У меня есть класс a и его экземпляр с использованием новых

$obja = new a; 

Я знаю разницу между двумя строками

 $obja2 = $ojba; $obja2 = clone $obja; 

Но даже если вы объявляете или не объявляете __clone в классе a, первая строка $ obja2 относится к пространству памяти $ obja, а вторая строка создает копию $ obja. До сих пор это ясно для меня.

Тогда почему php имеет магический метод __clone? Это только для выполнения набора кодов, который написан внутри __clone, в то время как мы используем $ obja2 = clone $ obja;

Кто-нибудь, пожалуйста, помогите лучше понять это.

 void __clone ( void ) 

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

http://php.net/manual/en/language.oop5.cloning.php#object.clone

Так что да, это обратный вызов после завершения операции clone . Ни больше ни меньше.

clone ключевого слова в PHP представляет собой мелкую копию .

Чтобы получить глубокую копию , вам необходимо реализовать магический метод __clone

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

Вот где глубокая копия пригодится, с чем-то вроде этого:

 public function __clone() { $this->someOtherObject = clone $this->someOtherObject; } 

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