Informática

Patrón singleton en PHP

18 octubre, 2011

El patrón singleton garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella, para eso restringe la creación de objetos pertenecientes a la misma clase.

La implementación de este patrón se consigue mediante la creación de un método en nuestra clase que cree una instancia del objeto únicamente si todavía no existe ninguna. Para conseguir estas restricciones se limita el alcance del constructor con el atributo “privado”.
Cuando un programa se ejecuta desde varios sitios a la vez y ambas ejecuciones intentan instanciar el objeto al mismo tiempo se produce la mayor inconsistencia, en este caso se utiliza la exclusión mutua en el constructor de la clase que implementa el patrón.
La utilización más común de este patrón es en las aplicación en las que se controla un recurso físico como puede ser un archivo abierto en modo exclusivo, o bien cuando un dato debe de estar disponible para el resto de objetos de la aplicación.
Ejemplo de utilización.
Suponemos que varios clientes distintos precisan referenciar a un mismo elemento y queremos asegurarnos de que no hay más de una instancia de ese elemento.
class MiPatronSingleton{
    // Contenedor de la instancia del singleton
    private static $instance;
    // Un constructor privado evita la creación de un nuevo objeto
    private function MiPatronSingleton()
    {
        echo ‘Objeto creado.’;
    }
    // método singleton
    public static function singleton()
    {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }
    // método de ejemplo
    public function holamundo()
    {
        echo ‘Hola Mundo’;
    }
    // Evita que el objeto se pueda clonar
    public function __clone()
    {
        trigger_error(‘La clonación de este objeto no está permitida’, E_USER_ERROR);
    }
}
¿Cómo obtengo una instancia de la clase y cómo uso sus métodos?
$objetoMiPatronSingleton = MiPatronSingleton::singleton();
$objetoMiPatronSingleton->holamundo();
Puedes compartir este artículo en:
    Deja un comentario

    Información básica acerca de cómo protegemos tus datos conforme al Reglamento General de Protección de Datos (Reglamento UE 2016/679) y en la Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales

    De conformidad con lo establecido en el Reglamento General de Protección de Datos, te informamos de:

    - Quien es el responsable del tratamiento: SEAS, Estudios Superiores Abiertos S.A.U con NIF A-50973098, dirección en C/ Violeta Parra nº 9 – 50015 Zaragoza y teléfono 976.700.660.

    - Cuál es el fin del tratamiento: Gestión y control de los comentarios del blog de SEAS. 

    - En que basamos la legitimación: En tu consentimiento.

    - La comunicación de los datos: No se comunicarán tus datos a terceros.

    - Los criterios de conservación de los datos: Se conservarán mientras exista interés mutuo para mantener el fin del tratamiento o por obligación legal. Cuando dejen de ser necesarios, procederemos a su destrucción.

    - Los derechos que te asisten: (i) Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al tratamiento, (ii) derecho a retirar el consentimiento en cualquier momento y (iii) derecho a presentar una reclamación ante la autoridad de control (AEPD).

    - Los datos de contacto para ejercer tus derechos: SEAS, Estudios Superiores Abiertos S.A.U. C/ Violeta Parra nº 9 –
    50015 Zaragoza (España) o través de correo electrónico a lopd@estudiosabiertos.com

    - También puedes ponerte en contacto con nuestro Delegado de Protección de Datos en dpd@estudiosabiertos.com

    Información adicional: Puedes consultar la información adicional y detallada sobre nuestra política de privacidad