Aujourd'hui, je pensais utiliser PHP pour utiliser singleton, et j'ai vu un résumé relativement complet - plusieurs implémentations du mode singleton L'implémentation de PHP5 y est résumée :
PLAIN TEXTPHP :
classe MyClass.
{
instance $ statique privée ;
fonction statique publique singleton()
{
if (!isset(self::$instance)) {
$c = __CLASSE__ ;
self::$instance = nouveau $c;
}
return self::$instance;
}
}
Ce code n'est pas très confortable à utiliser, car il est généralement hérité de MyClass, et $c = __CLASS__; obtient toujours le nom de la classe de base, qui n'est pas disponible. Nous ne pouvons qu’envisager de trouver d’autres méthodes de mise en œuvre.
Ensuite, j'ai commencé à regarder le singleton implémenté dans la méthode fonction dans l'article. L'implémentation était très bonne. L'inconvénient est que la classe ne peut pas être instanciée avec des paramètres. Voici ma version :
PLAIN TEXTPHP :
function getObj() {.
statique $obj = tableau();
$args = func_get_args();
si (vide ($ args))
renvoie null ;
$clazz = $args[0];
si(!is_object($obj[$clazz])) {
$cnt = compte($args);
si($cnt> 1) {
pour($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$args[' .
eval('$obj[$clazz] = new $clazz(' . join(',', $s) . ');');
} autre {
$obj[$clazz] = nouveau $clazz;
}
}
return $obj[$clazz];
}
Il peut être facilement appelé sous php5 :
PLAIN TEXTPHP :
getObj('MyClass', $param1, $param2)->myMethod();
Version naïve précédente :
Implémentation simple du mode monade (SINGLETON)