Si trabajas con PHP5 y POO te habrás topado en infinidad de ocasiones que has desarrollado una clase y debes instanciarla una y otra vez en cada una de las clases que crees posteriormente. Por ejemplo, una clase que se encargue de realizar la conexión con una base de datos. Como los datos de conexión de nuestra supuesta clase 'BaseDeDatos' no van a cambiar en ningún momento, ni necesitamos que el constructor de la clase mande diferentes parámetros con cada una de las instancias que hagamos, sería un desperdicio innecesario de memoria instanciarla en cada una de las clases que requieran acceso a la base de datos.
En este caso lo más lógico sería tener una instancia única siguiendo el patrón de diseño singleton, que garantizará que una clase sólo tenga una instancia con un punto de acceso global a ella.
Implementar este patrón es tan sencillo como crear un método que se encargará de crear un objeto de la clase si este no existe o devolver el objeto creado si existe una instancia previa. El constructor de la clase debe ser controlado con el atributo private para asegurarnos de que no se puedan crear instancias de forma directa.
Explicado sin nada de código puede parecer un poco confuso, así que mejor verlo en acción.
class BaseDeDatos{
//instancia de la clase
private static $instancia = null;
/**
* Constructor con atributo privado
*/
private function __construct(){
echo 'constructor';
}
/**
* Método para patrón singleton
* @return instancia del objeto
*/
public static function singleton(){
//si no existe instancia de la clase se crea y si existe se retorna la instancia existente
if( self::$instancia == null ){
self::$instancia = new self();
}
return self::$instancia;
}
}
//la primera vez se crea una instancia
$obj1 = BaseDeDatos::singleton();
//el resto de veces se retorna la instancia ya creada
$objX = BaseDeDatos::singleton();


















