Я использую PHP 5.2.14 и PearLog 1.12.3.
Последняя документация из одноэлементного метода в Log.php (PEARLog) гласит:
Вы ДОЛЖНЫ вызывать этот метод с помощью
Синтаксис $ var = & Log :: singleton ().
Без амперсанда (&) перед
имя метода, вы не получите
ссылка; вы получите копию.
Однако при этом выдается следующее предупреждение:
СТРОГО УВЕДОМЛЕНИЕ: Только переменные должны
назначаться по ссылке
Источник этой функции:
public static function singleton($handler, $name = '', $ident = '',
$conf = array(), $level = PEAR_LOG_DEBUG)
{
static $instances;
if (!isset($instances)) $instances = array();
$signature = serialize(array($handler, $name, $ident, $conf, $level));
if (!isset($instances[$signature])) {
$instances[$signature] = Log::factory($handler, $name, $ident,
$conf, $level);
}
return $instances[$signature];
}
Если я удалю & и использую только:
$var = Log::singleton()
тогда я больше не получаю предупреждение. Кроме того, если я сделаю
$var = Log::singleton();
$var2 = Log::singleton();
тогда $ var === var2 оценивается как true.
Вопрос : Что правильно: документация по API или предупреждение? (Если функция возвращает объект, разве это не ссылка в любом случае? Зачем мне амперсанд?