comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Trait Singleton en php

  • 0 Respuestas
  • 847 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« en: Octubre 09, 2013, 02:57:38 pm »
Siguiendo con mi idea de armarme pequeños modulos que realizen el trabajo importante y así yo solo los incluyo a la hora de crear un proyecto y no me tengo que gastar en escribir el mismo codigo miles de veces, les traigo singleton para que lo puedan implementar en sus clases.

La idea la saqué de una publicación de Xtempp en respuesta a mi post de Property, pero la mejoré un poquito.

¿qué es singleton?
Normalmente nosotros al usar objetos y clases, creamos varios objetos de la misma clase, de hecho yo he tenido arreglos llenos de objetos de x clase representando registros de una tabla, por ejemplo.
Si bien esto es normal usarlo de esta manera en cualquier lenguaje, (en c++ con listados por ejemplo), y es el uso original de las clases, permitirle definir estructuras y luego completar sus atributos con valores creando diferentes objetos (previamente instanciando dicha clase a la que le llamamos estructura)
No obstante se puede dar el caso de que nosotros únicamente queramos crear un objeto y manejar siempre el mismo objeto, creamos una clase para que solo tenga un objeto porque por algún motivo no nos interesa tener más de un objeto de dicha clase (lo que sucede en raros casos), no obstante, aquí es donde entra Singleton, que permite obtener la instancia de una clase que se guarda en la misma clase, de ese modo, cada vez que querramos usar la instancia de la clase (la única instancia) podemos obtener su instancia desde una función estática.

Dejando todas las explicaciones de lado, les dejo mi trait, que de la forma que está programado puede usarse en cualquier clase solo poniendo use Singleton;

Código: PHP
  1. <?php
  2.  
  3. trait Singleton
  4. {
  5.  
  6.     static private $instancia = null;
  7.    
  8.     static public function GetInstancia()
  9.     {
  10.         if(!(self::$instancia instanceof __CLASS__))
  11.         {
  12.             self::$instancia = new __CLASS__;
  13.         }
  14.         return self::$instancia;
  15.     }
  16.    
  17.     public function __clone()
  18.     {
  19.         No tienes permisos para ver links. Registrate o Entra con tu cuenta('No es posible realizar la clonación', E_USER_ERROR);
  20.     }
  21.  
  22. }

lo único que tienen que hacer en su clase para que acepte Singleton es poner

Código: PHP
  1. class miclase
  2. {
  3. use Singleton;
  4.  
  5.     ... resto del código
  6.  
  7. }

y si además quicieran usar mi property por ejemplo podrían poner así:

Código: PHP
  1. class miclase
  2. {
  3. use Singleton, Property;
  4.  
  5.     ... resto del código
  6.  
  7. }

saludos!

 

¿Te gustó el post? COMPARTILO!