El patron Singleton es una de las maneras mas utilizadas en POO para mantener solo una instancia de una determinada clase. Esto puede ser util en muchas ocaciones, en donde necesitemos controlas las instancias creadas. Se utiliza mucho en lenguajes como C++ o Java.
Tambien se puede utilizar en PHP como en este ejemplo
<?php class Ejemplo { // Contenedor Instancia de la Clase private static $instance; // A private constructor; previene creación de objetos vía new private function __construct() { echo 'Soy el constructor'; } // EL método singleton public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } // Clone no permitido public function __clone() { trigger_error('Clone no se permite.', E_USER_ERROR); } } ?>
Pero leyendo el blog joni2back.com.ar encontre otra forma de hacerlo.
<?php private static $myInstance = array(); public static function getInstance($instanceName = 'default') { return isset(self::$myInstance[$instanceName]) ? self::$myInstance[$instanceName] : self::$myInstance[$instanceName] = new self; }
Para usar la instancia asi:
//Default instance MyClass::getInstance()->setUsername('root'); //Payloads instance MyClass::getInstance('payloads')->setUsername('guest')