Сегодня я думал об использовании PHP для использования синглтона и увидел относительно подробное описание - несколько реализаций режима синглтона, обобщенные в нем:
PLAIN TEXTPHP:
class MyClass.
{
частный статический $экземпляр;
публичная статическая функция Singleton()
{
if (!isset(self::$instance)) {
$с = __КЛАСС__;
self::$instance = новый $c;
}
вернуть себя::$instance;
}
}
Этот код не очень удобен в использовании, поскольку он обычно наследуется от MyClass, а $c = __CLASS__ всегда получает имя базового класса, которого нет. Нам остается только рассмотреть вопрос о поиске других методов реализации.
Затем я начал рассматривать синглтон, реализованный в методе функции в статье. Реализация была очень хорошей. Недостатком является то, что класс не может быть создан с параметрами. Вот моя версия:
PLAIN TEXTPHP:
function getObj() {.
статический $obj = массив();
$args = func_get_args();
если (пусто ($ args))
вернуть ноль;
$clazz = $args[0];
if(!is_object($obj[$clazz])) {
$cnt = счетчик ($ args);
если($cnt> 1) {
for($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$args[' . $i ']';
eval('$obj[$clazz] = новый $clazz(' . join(',', $s) . ');');
} еще {
$obj[$clazz] = новый $clazz;
}
}
вернуть $obj[$clazz];
}
Его можно легко вызвать в php5:
PLAIN TEXTPHP:
getObj('MyClass',
$param1, $param2)->myMethod();
Простая реализация режима монады (SINGLETON)