В php5 клонирование объектов происходит при помощи метода clone. При копировании сложных объектов бывает необходимо контролировать что и как клонировать. Для этого используется метод __clone(). Метод __clone() вызывается автоматически когда объект копируется командой clone.
class Person{
private $паmе ;
private $age;
private $id ;
function construct ( $name, $age ) {
$this->name = $name ;
$this->age = $age ;
}
function setId( $id ) {
$this->id = $id;
}
function clone ( ){
$this->id = 0 ;
}
}
В данном примере при клонировании свойство $this->id у нового объекта будет равен нулю.
Если объект имеет связи с другими объектами то при простом копировании мы получим прямые ссылки на эти самые объекты. Чтобы этого избежать - нужно явно клонировать связи на другие объекты.