Ссылки и обьекты

BRat

o_0
Ссылки и обьекты

Нашел в одной книге по паттернам следующий вариант Singleton'a:
PHP:
class DbConn {
function DbConn($fromGetInstance=false) {
if (M_E != $fromGetInstance) {
trigger_error(‘The DbConn class is a Singleton,’
.’ please do not instantiate directly.’);
}
}
function &getInstance() {
$key = ‘__some_unique_key_for_the_DbConn_instance__’;
if (!(array_key_exists($key, $GLOBALS) && is_object($GLOBALS[$key])
&& ‘dbconn’ == get_class($GLOBALS[$key]) )) {
$GLOBALS[$key] =& new DbConn(M_E);
}
return $GLOBALS[$key];
}
}
Внимание вопрос:
Зачем здесь - $GLOBALS[$key] =& new DbConn(M_E); нужна ссылка? и соответсвенно что может случиться если ее оттуда убрать - $GLOBALS[$key] = new DbConn(M_E);
 

BRat

o_0
вопрос не по паттерну, а по синтаксису &= new.
Неужели никто не знает)
 

maxru

МИФИст
BRat, ссылка нужна, потому что это php4.
Если написать просто $somevar=new Someclass();
то интерпретатор создаст класс Someclass, затем скопирует его в переменную, а первый экземпляр класса останется висеть в памяти и доступ ты к нему не получишь. В данном примере написано совершенно корректное (для php4) присвоение указателя на создаваемый класс, что в php5 происходит автоматически... фух!

-~{}~ 24.07.06 21:55:

Источник: Люк Веллинг, Лора Томсон "Разработка web-приложений с помощью PHP и MySQL", 3-е издание.

(Да, я её всю прочитал! :D )
Кстати, второе издание (по php4) можно найти в интернете.
Если очень надо, на диске шло третье издание на английском, соответственно могу выложить 2е на руссок, 3е на английском.
 

BRat

o_0
maxru
гм, поражаюсь фантазии разработчиков php.

PS. 2-ое издание читал, ничего полезного для себя не обнаружил )
 
Сверху