El patrón de registro en PHP

El patrón de registro es interesante. Nos permite almacenar y recuperar objetos para su uso posterior. El proceso de almacenamiento y recuperación se basa en las claves que definimos. Dependiendo del alcance de los datos, la asociación de claves y objetos se hace global en un proceso, hilo o sesión, lo que nos permite recuperar los objetos desde cualquier lugar dentro del alcance de los datos.

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

<?php

class Registry
{
private $registry = [];
public function get($key)
{
if (isset($this->registry[$key])) {
return $this->registry[$key];
}
return null;
}
public function set($key, $value, $graceful = false)
{
if (isset($this->registry[$key])) {
if ($graceful) {
return;
}
throw new \RuntimeException('Registry key "' . $key . '"already
exists');
}
$this->registry[$key] = $value;
}
public function remove($key)
{
if (isset($this->registry[$key])) {
unset($this->registry[$key]);
}
}
public function __destruct()
{
$keys = array_keys($this->registry);
array_walk($keys, [$this, 'remove']);
}
}
// Client use
class User
{
public $name;
}
$user1 = new User();
$user1->name = 'John';
$user2 = new User();
$user2->name = 'Marc';
$registry = new Registry();
$registry->set('employee', $user1);
$registry->set('director', $user2);
echo $registry->get('director')->name; // Marc

La implementación de nuestra clase de Registro tiene tres métodos clave: get(), set(), remove(). El método set() permite un comportamiento elegante basado en el parámetro $graceful; de lo contrario, desencadena la RuntimeException para la clave existente. También definimos un método __destruct, como una especie de mecanismo de limpieza que elimina cada elemento del registro cuando la instancia de $registry se destruye.

Comparte