elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 04:14  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  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 1,172 veces)
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



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

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
<?php
 
   /*
   *   Ejemplo de uso del patr&#243;n
   *   Singleton
   */

   class singletonPattern {
 
       // Variable que almacenar&#225; 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&#243;n
   *   Singleton
   */

   class singletonPattern {
 
       // Variable que almacenar&#225; 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.


« Última modificación: 12 Agosto 2011, 16:40 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
El As del Club Paris


Desconectado Desconectado

Mensajes: 1.816


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

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

sudo suck --mycock -o force
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



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

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
<?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;
 
}
 
public function sayHelloTo($name) {
echo "Hello " . $name . "!";
}
 
}
 
$obj = singletonPattern::createInstance()->sayHelloTo('mad'); 
print_r($obj);
 
?>
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 2,068 Último mensaje 30 Abril 2008, 05:58
por JWizard
Introducción a FirePHP [Tutorial]
PHP
madpitbull_99 1 642 Último mensaje 23 Marzo 2011, 11:52
por Aeros
Introducción a los Web Application Firewalls (WAF)
Seguridad
madpitbull_99 4 2,323 Último mensaje 15 Julio 2011, 18:33
por Dr [F]
Introducción al comando Find
GNU/Linux
madpitbull_99 2 386 Último mensaje 28 Julio 2011, 22:55
por portaro
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines