O operador ‘=’, por padrão, faz uma cópia superficial do objeto (o objeto copiado tem a mesma referência do original):
$ obj1 = novo ObjectType ();
$ obj2 = $ obj1; // $ obj2 refere-se ao mesmo endereço de memória de $ obj1
Para realizar uma cópia profunda (criar um novo objeto do mesmo tipo com os mesmos atributos) usamos a palavra reservada ‘clone’:
$ obj1 = novo ObjectType ();
$ obj2 = clone $ obj1; // $ obj2 refere-se a um novo endereço de memória que contém uma cópia de $ obj1, atributo por atributo.
Observe que se os atributos de $ obj1 também são referências a objetos, ‘clone’ fará uma cópia superficial deles, ou seja, usará a mesma referência para eles.