Heute habe ich darüber nachgedacht, PHP für die Verwendung von Singleton zu verwenden, und habe eine relativ umfassende Zusammenfassung gesehen – mehrere Implementierungen des Singleton-Modus. Die darin zusammengefasste Implementierung von PHP5:
PLAIN TEXTPHP:
Klasse MyClass
{
private statische $instanz;
öffentliche statische Funktion Singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
}
Dieser Code ist nicht sehr komfortabel zu verwenden, da er im Allgemeinen von MyClass geerbt wird und $c = __CLASS__; immer den Klassennamen der Basisklasse erhält, der nicht verfügbar ist. Wir können nur darüber nachdenken, andere Implementierungsmethoden zu finden.
Dann habe ich angefangen, mir die in der Funktionsmethode implementierte Singleton anzusehen. Der Nachteil ist, dass die Klasse nicht mit Parametern instanziiert werden kann:
PLAIN TEXTPHP:
function getObj() {.
static $obj = array();
$args = func_get_args();
if(empty($args))
null zurückgeben;
$clazz = $args[0];
if(!is_object($obj[$clazz])) {
$cnt = count($args);
if($cnt> 1) {
for($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$args[' $i .
eval('$obj[$clazz] = new $clazz(' . join(',', $s) . ');');
} anders {
$obj[$clazz] = new $clazz;
}
}
return $obj[$clazz];
}
Es kann einfach unter PHP5 aufgerufen werden:
PLAIN TEXTPHP:
getObj('MyClass', $param1, $param2)->myMethod()
;
Einfache Implementierung des Monadenmodus (SINGLETON)