Hoy estaba pensando en usar PHP para usar singleton y vi un resumen relativamente completo: varias implementaciones del modo singleton. La implementación de PHP5 se resume en:
TEXTO SENCILLO HP:
clase MyClass.
{
instancia privada estática $;
función estática pública singleton ()
{
if (!isset(self::$instancia)) {
$c = __CLASE__;
self::$instancia = nuevo $c;
}
return self::$instancia;
}
}
Este código no es muy cómodo de usar, porque generalmente se hereda de MyClass y $c = __CLASS__ siempre obtiene el nombre de la clase base, que no está disponible. Solo podemos considerar encontrar otros métodos de implementación.
Luego comencé a mirar el singleton implementado en el método de función en el artículo. La implementación fue muy buena. La desventaja es que no se puede crear una instancia de la clase con parámetros. Aquí está mi versión:
PLAIN TEXTPHP:
function getObj() {.
estático $obj = matriz();
$args = func_get_args();
si(vacío($args))
devolver nulo;
$clazz = $args[0];
si(!is_object($obj[$clazz])) {
$cnt = recuento($args);
si($cnt> 1) {
para($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$argumentos[' .
eval('$obj[$clazz] = new $clazz(' . join(',', $s) . ');');
} demás {
$obj[$clazz] = nuevo $clazz;
}
}
return $obj[$clazz];
}
Se puede llamar fácilmente en php5:
TEXTO SENCILLO:
getObj('MyClass', $param1, $param2)->myMethod();
Versión ingenua anterior:
Implementación simple del modo mónada (SINGLETON)