clase que no se puede instanciar más de una vez. En realidad es algo más complejo, pero para entender la idea, nos sirve ésta explicación.
Lo ideal es recurrir es éste patrón de diseño a partir de PHP5, aunque en PHP4 también se puede hacer, pero la clase se podrá instanciar más de una vez.
Partiremos desde el siguiente código:
Código
<?php /* * Ejemplo de uso del patrón * Singleton */ class singletonPattern { // Variable que almacenará la instancia static private $instance = null; // Constructor de la clase private function __construct() { // es private, por tanto // no puede ser instanciada usando // new. } } ?>
Tenemos una clase llamada "singletonPattern", con una variable estática llamada "$instance", dicha variable indica si la clase ha sido instancia o no,
en caso de tener el valor "null" la clase no ha sido instanciada.
La siguiente función, no es más que el constructor de la clase, que como vemos es "private", por lo tanto, no podemos acceder a ella desde el exterior.
Al intentar crear un objeto de la clase, se producirá un error, ya que, no podrá ser instanciada mediante la palabra reservada "new".
Para resolver éste problema, crearemos otro objeto que instancie la clase por nosotros y que nos devuelva el objeto.
Código
<?php /* * Ejemplo de uso del patrón * Singleton */ class singletonPattern { // Variable que almacenará la instancia static private $instance = null; // Constructor de la clase private function __construct() { // es private, por tanto // no puede ser instanciada usando // new. } static public function createInstance() { if (self::$instance == null) { // Si la clase no ha sido instanciada self::$instance = new singletonPattern(); } return self::$instance; } } $obj = singletonPattern::createInstance(); ?>
Como vemos, se ha creado un método llamado "createInstance()" que nos devuelve una instancia/objeto de la clase "singletonPattern", la variable "$instance", al ser
privada, hay que acceder a ella usando la palabra reservadaself:: seguida del nombre de la variable.
Básicamente, la última función creada comprueba si el valor de $instance es null, o sea la clase no ha sido instanciada, sino, se crea y se devuelve una instancia del objeto.
Como último creamos una instancia de la clase usando la última función creada.