Hoje eu estava pensando em usar PHP para usar singleton e vi um resumo relativamente abrangente - várias implementações do modo singleton A implementação do PHP5 resumida nele:
PLAIN TEXTPHP:
class MyClass.
{
instância $ estática privada;
função estática pública singleton()
{
if (!isset(self::$instance)) {
$c = __CLASSE__;
self::$instance = new $c;
}
return self::$instancia;
}
}
Este código não é muito confortável de usar, porque geralmente é herdado de MyClass e $c = __CLASS__ sempre obtém o nome da classe base, que não está disponível. Só podemos considerar encontrar outros métodos de implementação.
Então comecei a olhar para o singleton implementado no método de função do artigo. A implementação foi muito boa. A desvantagem é que a classe não pode ser instanciada com parâmetros. Aqui está minha versão:
PLAIN TEXTPHP:
function getObj() {.
estático $obj = array();
$args = func_get_args();
if(vazio($args))
retornar nulo;
$clazz = $args[0];
if(!is_object($obj[$clazz])) {
$cnt = contagem($args);
if($cnt> 1) {
for($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$args[' .
eval('$obj[$clazz] = new $clazz(' . join(',', $s) . ');');
} outro {
$obj[$clazz] = new $clazz;
}
}
return $obj[$clazz];
}
Pode ser facilmente chamado no php5:
PLAIN TEXTPHP:
getObj('MyClass',
$param1, $param2)->myMethod();
Implementação simples do modo mônada (SINGLETON)