我使用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