elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Introducción al patrón Singleton con PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Introducción al patrón Singleton con PHP  (Leído 3,556 veces)
madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Introducción al patrón Singleton con PHP
« en: 12 Agosto 2011, 15:59 pm »

Sin recurrir a una explicación de la Wikipedia, diré que un "singleton"; no es más que una
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
  1. <?php
  2.  
  3.    /*
  4.     *   Ejemplo de uso del patr&#243;n
  5.     *   Singleton
  6.     */
  7.    class singletonPattern {
  8.  
  9.        // Variable que almacenar&#225; la instancia
  10.        static private $instance = null;
  11.  
  12.        // Constructor de la clase
  13.        private function __construct() {
  14.  
  15.                // es private, por tanto
  16.                // no puede ser instanciada usando
  17.                // new.
  18.  
  19.            }
  20.    }
  21.  
  22. ?>
  23.  

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
  1. <?php
  2.  
  3.    /*
  4.     *   Ejemplo de uso del patr&#243;n
  5.     *   Singleton
  6.     */
  7.    class singletonPattern {
  8.  
  9.        // Variable que almacenar&#225; la instancia
  10.        static private $instance = null;
  11.  
  12.        // Constructor de la clase
  13.        private function __construct() {
  14.            // es private, por tanto
  15.            // no puede ser instanciada usando
  16.            // new.
  17.  
  18.        }
  19.  
  20.        static public function createInstance() {
  21.  
  22.            if (self::$instance == null) {
  23.                // Si la clase no ha sido instanciada
  24.                self::$instance = new singletonPattern();
  25.            }
  26.            return self::$instance;
  27.  
  28.        }
  29.  
  30.    }
  31.  
  32.    $obj = singletonPattern::createInstance();
  33.  
  34. ?>
  35.  

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.


« Última modificación: 12 Agosto 2011, 16:40 pm por madpitbull_99 » En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: Introducción al patrón Singleton con PHP
« Respuesta #1 en: 12 Agosto 2011, 16:26 pm »

Buena info, basicamente se trata de controlar por un miembro privado la 'instanciacion' de la clase, no?.

Tenes dos veces la sentencia __contruct en el primer script, eso podria confundir a mas de uno.

Saludos


En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Introducción al patrón Singleton con PHP
« Respuesta #2 en: 12 Agosto 2011, 16:46 pm »

Gracias por el aviso, ya está corregido.

En principio se implementa éste patrón para que no tengas que instanciar la clase las veces que sean necesarias sino hacerlo solo una vez.

Un ejemplo muy básico sería:

Código
  1. <?php
  2.  
  3. /*
  4. *   Ejemplo de uso del patrón
  5. *   Singleton
  6. */
  7. class singletonPattern {
  8.  
  9. // Variable que almacenará la instancia
  10. static private $instance = null;
  11.  
  12. // Constructor de la clase
  13. private function __construct() {
  14. // es private, por tanto
  15. // no puede ser instanciada usando
  16. // new.
  17.  
  18. }
  19.  
  20. static public function createInstance() {
  21.  
  22. if (self::$instance == null) {
  23. // Si la clase no ha sido instanciada
  24. self::$instance = new singletonPattern();
  25. }
  26. return self::$instance;
  27.  
  28. }
  29.  
  30. public function sayHelloTo($name) {
  31. echo "Hello " . $name . "!";
  32. }
  33.  
  34. }
  35.  
  36. $obj = singletonPattern::createInstance()->sayHelloTo('mad');
  37.  
  38. print_r($obj);
  39.  
  40. ?>
En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Singleton, static y herencia
Java
ҒrεακΠιи∂ 1 5,266 Último mensaje 30 Abril 2008, 05:58 am
por JWizard
Introducción a FirePHP [Tutorial]
PHP
madpitbull_99 1 2,695 Último mensaje 23 Marzo 2011, 11:52 am
por Aeros
Introducción a los Web Application Firewalls (WAF)
Seguridad
madpitbull_99 4 7,395 Último mensaje 15 Julio 2011, 18:33 pm
por Dr [F]
Duda patrón Singleton
Desarrollo Web
flash-back 0 1,918 Último mensaje 11 Febrero 2013, 16:37 pm
por flash-back
Singleton variables prolog
Programación General
m@o_614 1 6,027 Último mensaje 22 Diciembre 2013, 19:52 pm
por lnvisible
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines