¿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, $configy $otraInstanciason 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 😉

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to Top
0
Would love your thoughts, please comment.x
()
x