Patrón singleton en PHP

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();

Autor: Germán Romeo Martinez

Acerca de José María Megino

Ingeniero Informático por la Universidad de Zaragoza y Máster Universitario en Formación de Profesorado de ESO y Bachillerato, FP y Enseñanza de Idiomas, Especialidad de Tecnología e Informática por la Universidad Internacional de La Rioja, Actualmente, Profesor Titular y Coordinador Docente en SEAS, Estudios Superiores Abiertos. (Grupo San Valero)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: