(Untitled)

Nov 11, 2007 21:44

причём тут Синглтон?

Singleton::getInstance -- это метод класса.
этот метод нужно было определять в каждом классе, который хотелось бы сделать Одиночкой.

теперь же, ценой совсем небольшого геморроя, определяем маленький класс Синглтон, а потом наследуем от него что-угодно:

in plain english )

Leave a comment

Comments 22

stas November 11 2007, 22:07:28 UTC
В 5.3 есть late static binding:

public static function getInstance() {
$className = get_called_class();
if(!isset(self::$instances[$className])) self::$instances[$className] = new $className;
return self::$instances[$className];
}

Reply

demiurg November 11 2007, 22:09:16 UTC
эка, а я и не знал.
пасиб!

Reply

stas November 11 2007, 23:58:25 UTC
он же static:: если не надо динамики (т.е. static::foo() как self:: и parent::).

Reply

david_m November 12 2007, 10:07:53 UTC
Хм, а чем тогда отличается self::foo() от static::foo()?

Reply


raa November 11 2007, 22:08:13 UTC
спасибо
но все равно жесть
а че кроме как через debug_backtrace в пятерке класс не получить?

Reply

demiurg November 11 2007, 22:10:55 UTC
как раз комментом выше stas подсказал.
всё красивенько даже получается.
щас код проапдейчу в посте.

но проблема "курицы и йейца" по-моему всё равно остаётся.

Reply


david_m November 11 2007, 23:03:15 UTC
> Singleton ведь не должен мочь создать объект Chained'а, т.к. ничего о нём не знает?

Вот чем хорош PHP, так это тем, что в нём и невозможное - возможно:) Вообще-то, кажется, ни в одном (нормальном, строгом, логичном - по вкусу) языке статик-метод не может определить, в контексте какого класса его дёрнули. Нельзя. Но раз нам очень хочется… ну почему не ввести ещё одну функцию? Чай не впервой.

Reply


insa November 11 2007, 23:04:04 UTC
чудесно, в помойку добавили новый костыль, и назвали его фичей...

Как вы думаете, сколько народу будет постоянно путаться - __callStatic или __staticCall?

Reply

demiurg November 11 2007, 23:07:37 UTC
те, кто никогда не знал про __call() -- часто, но нам они похую =)

Reply

insa November 11 2007, 23:18:03 UTC
вынужден признать, что мне тоже похуй на мартышек "программирующих" на пхп

Reply

demiurg November 11 2007, 23:19:31 UTC
на мартышек всегда похуй

Reply


david_m November 12 2007, 10:09:06 UTC
Но кстати, раз у нас теперь всё так шоколадно с get_called_class(), то зачем вообще __callStatic в данном случае? Просто объявить статический getinstance… ИЛИ я что-то упускаю?

Reply

demiurg November 12 2007, 10:22:02 UTC
хм, а вроде и ничего.
они там по ходу дела конкретно переработали работу со статическими классами.
надо будет потом release notes на 5.3 почитать =)

Reply

david_m November 12 2007, 10:31:53 UTC
А ты это на живом cvs-ном коде проверяешь, или это пока теоретически?

Reply

demiurg November 12 2007, 10:34:53 UTC
угу, на живом, на CVS-ном:

# php -v
PHP 6.0.0-dev (cli) (built: Nov 8 2007 22:02:02)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2007 Zend Technologies

# php5 -v
PHP 5.3.0-dev (cli) (built: Nov 8 2007 22:28:06)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2007 Zend Technologies

Reply


Leave a comment

Up