Pattern Singleton en PHP4

A pesar de sus limitaciones en cuanto a orientación a objetos, PHP4 permite implementar un pattern del tipo Singleton.

Por defecto, en PHP4 (y a diferencia de PHP5) los objetos se devuelven/asignan por valor (una copia), por ello es necesario indicar expresamente que deseamos devolver/asignar una referencia del objeto en cuestión.

Una de las formas más elegantes de implemetar este pattern es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Clase de la cual deseamos que exista
// una única instancia en todo el programa
class Config
{
   var $message = null;

   function set($message)
   {
      $this->message = $message;
   }

   function get()
   {
      return $this->message;
   }
}

// Pattern que se ocupará de devolver
// la única instancia de la clase Config
class Singleton
{
   // Método que devuelve una referencia al objeto
   function &get()
   {      
      static $instance;
     
      if ( ! isset($instance) )
      {
         $instance = new Config();
         print "instancia creada.\n";
      }
     
      return $instance;      
   }
}

// Forma de uso
$config =& Singleton::get();
$config->set('hello world.');
printf("%s\n", $config->get());

$config =& Singleton::get();
printf("%s\n", $config->get());

Salida del programa

instancia creada.
hello world.
hello world.

Tags: , ,