El patrón prototype en PHP

El patrón prototype se trata de crear nuevos objetos mediante su clonación. Este es un gran concepto, ya que ya no usamos la nueva palabra clave para crear nuevos objetos. El lenguaje PHP proporciona una palabra clave especial clone para ayudar con la clonación de objetos.

El siguiente ejemplo demuestra una posible implementación del patrón prototype:

<?php
class Logger
{
public $channel = 'N/A';
}
class SystemLogger extends Logger
{
public function __construct()
{
$this->channel = 'STDIN';
}
public function log($data)
{
return sprintf('Logging %s to %s.', $data, $this->channel);
}
public function __clone()
{
/* additional changes for (after)clone behavior? */
}
}
// Client use
$systemLogger = new SystemLogger();
echo $systemLogger->log('test');
$logger = clone $systemLogger;
echo $logger->log('test2');
$logger->channel = 'mail';
echo $logger->log('test3');
// Logging test to STDIN.
// Logging test2 to STDIN.
// Logging test3 to mail.

Normalmente, todo lo que se necesita para clonar un objeto es usar una expresión como $clonedObj = clone $obj ;. Esto, sin embargo, no nos da ningún control sobre el proceso de clonación. Los objetos PHP pueden ser pesados, con muchos miembros y referencias. A veces, nos gustaría imponer ciertas limitaciones en el objeto clonado. Aquí es donde el método mágico __clone() es útil. El método __clone() se activa después de que se realiza el proceso de clonación, que es algo a tener en cuenta para posibles implementaciones de código de limpieza.

Comparte