
¿Qué es el patrón Singleton en PHP?
El patrón Singleton es uno de los patrones de diseño más conocidos en programación. Su propósito es asegurarse de que una clase tenga una única instancia y proporcionar un punto de acceso global a ella.
En otras palabras, con Singleton evitamos que se creen múltiples objetos de la misma clase. Esto es útil, por ejemplo, cuando trabajamos con conexiones a bases de datos, configuraciones globales, o gestión de logs.
¿Por qué usar Singleton?
👉 Para ahorrar recursos.
👉 Para evitar inconsistencias.
👉 Para mantener un único punto de control.
Imagina que estás trabajando con una conexión a la base de datos. Si cada vez que quieres consultar algo se crea una nueva conexión, tu aplicación será ineficiente. En cambio, con un Singleton usas la misma instancia para todo el proyecto.
¿Cómo se implementa un Singleton en PHP?
Veamos un ejemplo básico para entender cómo funciona.
<?php class AppConfig { private static $instance = null; private $config = []; // Constructor privado para evitar instancias externas private function __construct() { $this->config = [ 'appName' => 'MiAplicacion', 'version' => '1.0.0', 'debugMode' => true ]; } // Previene la clonación de la instancia private function __clone() {} // Previene la deserialización private function __wakeup() {} // Método estático para acceder a la instancia public static function getInstance() { if ( self::$instance === null ) { self::$instance = new self(); } return self::$instance; } public function getConfig( $key ) { return $this->config[ $key ] ?? null; } public function setConfig( $key, $value ) { $this->config[ $key ] = $value; } }
¿Cómo se usa?
<?php // Obtenemos la instancia $config = AppConfig::getInstance(); // Accedemos a una configuración echo $config->getConfig( 'appName' ); // Imprime: MiAplicacion // Modificamos un valor $config->setConfig( 'debugMode', false ); // En otra parte del código... $otraInstancia = AppConfig::getInstance(); echo $otraInstancia->getConfig( 'debugMode' ); // Imprime: false
✔️ Como puedes ver, $config
y $otraInstancia
son la misma instancia.
✔️ Cambios hechos en un lado afectan al otro.
Cuándo evitar usar Singleton
Aunque el patrón Singleton es muy útil, no es la solución mágica para todo. Algunos desarrolladores lo consideran un antipatrón cuando se abusa de él, ya que:
- Puede dificultar las pruebas unitarias.
- Puede ocultar dependencias reales entre clases.
- A veces es mejor usar inyección de dependencias en lugar de Singleton.
El patrón Singleton es ideal cuando necesitas que una clase tenga una única instancia globalmente accesible. Es muy común en casos como conexión a bases de datos, archivos de configuración, manejo de sesiones, entre otros.
Pero recuerda: úsalo con moderación. Un buen programador sabe cuándo aplicarlo y cuándo no 😉