Usando __clone() en PHP 7

El método mágico __clone() se activa en objetos recién clonados, donde la clonación se realiza utilizando la palabra clave clone. El método no acepta ningún parámetro ni devuelve ningún valor, según la siguiente sinopsis:

void __clone(void)

Cuando se trata de la clonación de objetos, tendemos a diferenciar la copia profunda y la copia superficial. La copia profunda copia todo: todos los objetos a los que puede apuntar un objeto. Copia poco profunda copia lo menos posible, dejando las referencias de objeto como referencias cuando sea posible. Si bien la copia superficial puede ser útil como protección contra referencias circulares, replicar todas las propiedades, ya sean referencias o valores, no siempre es el comportamiento deseado.
El siguiente ejemplo demuestra la implementación del método __clone() y el uso de la palabra clave clone:

<?php
class User
{
public $identifier;
public function __clone()
{
$this->identifier = null;
}
}
$user = new User();
$user->identifier = 'john';
$user2 = clone $user;
var_dump($user);
var_dump($user2);

Esto da como resultado la siguiente salida:

object(User)#1 (1) {
["identifier"]=> string(4) "john"
}
object(User)#2 (1) {
["identifier"]=> NULL
}

La conclusión importante cuando se trata del método __clone() es que no es una anulación del proceso de clonación. El proceso normal de clonación siempre ocurre. El método __clone() simplemente asume la responsabilidad de enmendar las acciones incorrectas, donde normalmente no estaríamos satisfechos con el resultado.

Comparte