Hola,
Estoy empezando a jugar con la programación orientada a objetos y me preguntaba que opina la gente sobre el siguiente código:
Código PHP:
<?php
abstract class Clase_Base
{
protected $Variable;
protected function __construct ()
{
echo '<p>Constructor Clase_Base</p>';
}
public function set_Variable ($Valor) { $this->Variable = $Valor; }
public function get_Variable () { echo '<p>Variable: ' . $this->Variable . '</p>'; }
}
abstract class Clase_Base_Singleton extends Clase_Base
{
private static $Instancia;
private static $NInstancias;
protected function __construct ()
{
self::$NInstancias = 0;
echo '<p>Constructor Clase_Base_Singleton</p>';
parent::__construct();
}
public static function singleton($Tabla)
{
if (!isset(self::$Instancia))
{
echo 'Singleton';
self::$Instancia = new $Tabla;
}
self::$NInstancias++;
return self::$Instancia;
}
}
class Mi_Clase extends Clase_Base_Singleton
{
public function __construct ()
{
echo '<p>Constructor Mi_Clase</p>';
parent::__construct();
}
}
$Clase1 = Mi_Clase::singleton('Mi_Clase');
$Clase1->set_Variable('variable singleton');
$Clase1->get_Variable(); // imprime "variable singleton"
$Clase2 = Mi_Clase::singleton('Mi_Clase');
$Clase2->get_Variable(); // imprime "variable singleton"
$Clase3 = new Mi_Clase;
$Clase3->get_Variable(); // No imprime nada
$Clase3->set_Variable('variable');
$Clase3->get_Variable(); // Imprime "variable"
$Clase4 = new Mi_Clase;
$Clase4->get_Variable(); // No imprime nada
$Clase5 = Mi_Clase::singleton('Mi_Clase');
$Clase5->get_Variable(); // imprime "variable singleton"
?>
¿Veis bien el hecho de que una clase permita la creación de varias instancias o una única (singleton) según se desee? ¿Qué problemas le veis?
Saludos.