Una breve entrada para describir el patrón de diseño denominado
Singleton y para contaros cómo podríamos implementarlo en
PHP.
Intención del patrón
Garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella.
Problema a resolver
Varios clientes distintos precisan referenciar a un mismo elemento y
queremos asegurarnos de que no hay más de una instancia de ese elemento.
Solución -> Singleton
Garantizaremos una única instancia.
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
|
class MiSingleton{
// Contenedor de la instancia del singleton
private static $instance;
// Un constructor privado evita la creación de un nuevo objeto
private function __construct()
{
echo 'Construido!';
}
// método singleton
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// método de ejemplo
public function ladrar()
{
echo 'Woof!';
}
// Evita que el objeto se pueda clonar
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
|
¿Cómo obtengo una instancia de la clase y cómo uso sus métodos?
|
$objMiSingleton = MiSingleton::singleton();
$objMiSingleton->ladrar();
|
.