Singleton en PHP

marzo 12th, 2013 | Posted by alegg in PHP - (0 Comments)

El patron Singleton  es una de las maneras mas utilizadas en POO para mantener solo una instancia de una determinada clase.  Esto puede ser util en muchas ocaciones, en donde necesitemos controlas las instancias creadas. Se utiliza mucho en lenguajes como C++ o Java.

Tambien se puede utilizar en PHP como en este ejemplo

<?php
class Ejemplo
{
    // Contenedor Instancia de la Clase
    private static $instance;

    // A private constructor; previene creación de objetos vía new
    private function __construct()
    {
        echo 'Soy el constructor';
    }

    // EL método singleton 
    public static function singleton()
    {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }

        return self::$instance;
    }

    // Clone no permitido
    public function __clone()
    {
        trigger_error('Clone no se permite.', E_USER_ERROR);
    }

}
?>

Pero leyendo el blog joni2back.com.ar encontre otra forma de hacerlo.

<?php
private static $myInstance = array();
 public static function getInstance($instanceName = 'default') 
{
    return isset(self::$myInstance[$instanceName]) ? 
    self::$myInstance[$instanceName] : 
    self::$myInstance[$instanceName] = new self;
}
Para usar la instancia asi:
//Default instance
MyClass::getInstance()->setUsername('root');

//Payloads instance
MyClass::getInstance('payloads')->setUsername('guest')

Patrón Factory method en PHP

octubre 1st, 2009 | Posted by alegg in Codigo | PHP - (0 Comments)

El patrón Factory permita la instancia de objetos en tiempo de ejecución. Es llamado el patrón Factory puesto que es responsable de “manufacturar” un objeto.

class Example
{
 // The factory method
 public static function &factory($type)
 {
 if (include_once 'Drivers/' . $type . '.php') 
 {
 $classname = 'Driver_' . $type;
 return new $classname;
 } else {
    throw new Exception ('Driver not found');
 }
}
}

Al definir este método en una clase se nos permite que los drivers sean cargados al vuelo. Si la clase Example fuera una clase de abstracción de base de datos, cargar un manejador de MySQL y SQLite podría ser hecho como sigue:

 // Load a MySQL Driver
 $mysql = Example::factory('MySQL');

 // Load a SQLite Driver
 $sqlite = Example::factory('SQLite');

Patrón Singleton en PHP

octubre 1st, 2009 | Posted by alegg in Codigo | PHP - (0 Comments)

El patrón Singleton se aplica a situaciones en las cuales hay la necesidad de tener una sola instancia de una clase. El ejemplo más común de esto es una conexión de base de datos. Tendremos una simple instancia fácilmente accesible a muchos otros objetos.

class Example
{
 // Hold an instance of the class
 private static $instance;
 //A private constructor; prevents direct creation of object

 private function __construct()
 {
  echo 'I am constructed';
 }

 // The singleton method
 public static function singleton()
 {

  if (!isset(self::$instance)) {
   $c = __CLASS__;
   self::$instance = new $c;
  } 
  return self::$instance;
 }

 // Example method
 public function bark()
 {
  echo 'Woof!';
 }

 // Prevent users to clone the instance
 public function __clone()
 {
  trigger_error('Clone is not allowed.', E_USER_ERROR);
 }
}