我使用PHP 5.2.14和PearLog 1.12.3。 從singleton method in Log.php(PEARLog)最新文檔指出:在PHP中返回對象的引用
則必須調用此方法與 是$ var = &登錄::單()的語法。 在 之前沒有&符號(&)的方法名稱,您將不會得到 引用;你會得到一份副本。
然而,這樣做會產生以下的警告:
嚴格注意:只有變量應該 通過引用
源用於該功能被分配是:
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文檔或警告? (如果函數返回一個對象,是不是它是一個參考?爲什麼我需要&符號?
也許它是爲兼容性而編寫的。所以,如果你有PHP4,它將是okey,如果你有PHP5,它也可以。 – Eugene 2010-10-18 22:25:09
這不是從http://pear.php.net/package/Log/docs鏈接到的PEAR_Log軟件包的授權文檔,可在http://www.indelible.org/php/Log/guide html的。該文檔沒有說明您必須使用單例模式來獲取Log對象。 – kguest 2010-10-19 08:36:05
@kguest:我提供的鏈接是我發現的第一個鏈接,但這沒什麼關係。引用來自實際的源代碼。不能比這更具權威性。我的問題不是關於使用單例模式,而是關於Log的單例方法的文檔。 – JRL 2010-10-19 13:31:57