Volvemos a los patrones de diseño tras un par de artículos de otra índole, y lo hacemos con Registry. La idea de este patrón es que nos permita utilizar los objetos y variables registrados en cualquier nivel de la aplicación sin necesidad de duplicarlos. Es decir, en la práctica nos permitiría usar cualquier objeto como si fuera un Singleton.
La idea de este patrón es crear una clase que tenga un array donde guardar los objetos registrados y una serie de métodos: uno que añada los objetos al array, otro que compruebe su existencia para evitar duplicaciones, otro que devuelva el objeto pasándole su clave, uno que borre el objeto recibiendo la clave y finalmente uno que limpie el array de la clase.
Pasado a código, PHP como siempre, la estructura sería la siguiente:
<?php class Registry { /** * Registra variables y objetos */ static private $registry = array(); /** * Método que añade objetos * Recibe el objeto (por referencia) y la clave * Devuelve un booleano para confirmar si se ha insertado * o si en cambio estaba duplicado. */ static public function add($key, &$elemento) { if (!self::exists($key)) { self::$registry[$key] = $elemento; return true; } else { return false; } } /** * Función que comprueba la existencia de una clave. * Devuelve un booleano confirmando si existe o no. */ static public function exists($key) { return array_key_exists($key, self::$registry); } /** * Función que devuelve un item dada la clave */ static public function get($key) { if (self::exists($key)) { return self::$registry[$key]; } else { return null; } } /** * Elimina una entrada recibiendo su clave y devuelve confirmación. * Si la clave no existe devuelve false. */ static public function remove($name) { if (self::exists($name)) { unset(self::$registry[$name]); return true; } else { return false; } } /** * Limpia el registro totalmente. */ static public function clear() { self::$registry = array(); } } ?>
El ejemplo es una estructura muy básica, puedes ampliarlo con filtros varios, control de errores y demás, pero la idea del esqueleto de este tipo de clase.
Ale, a disfrutarlo.
Hola,
he visto algunos ejemplos donde explican esta misma clase sin definir los metodos como estáticos(sin la palabra ‘static’ )solo la propiedad (static private $registry = array(); )
Sin embargo acceden a la propiedad mediante self::, ¿son estáticos estos métodos aun sin ser declarados como static?
En este post puedes ver un ejemplo de lo que digo(http://desphpparatodos.blogspot.com.es/2010/12/patron-registry.html)
¿me podrías aclarar esto?
Gracias, saludos:D