我有一个具有此功能的课程:
public static function getSingleton($modelClass='', array $arguments=array())
{
$registryKey = '_singleton/'.$modelClass;
if (!isset(self::$_registry[$registryKey])) {
if (isset(self::$_registry[$registryKey])) {
throw new Exception('Mage registry key "'.$registryKey.'" already exists');
}
self::$_registry[$registryKey] = self::getModel($modelClass, $arguments);
}
return self::$_registry[$registryKey];
}
抛出异常。如何抛出异常?我想不出任何方式isset()和!isset()都可以返回true - 但它们是!怎么会发生这种情况?我正在使用APC,这可能与它有什么关系吗?我怎么会调试这个?
答案 0 :(得分:1)
Isset测试变量或索引是否已初始化,并且不总是使用布尔值。该值也可以为null,并且正确的测试方法(因为PHP松散耦合)将是:
if (isset(self::$_registry[$key]) === true)
或者更好;
if (array_key_exists($key, self::$_registry))
我总是建议使用array_key_exists代替isset,因为第一个对于真/假条件更可靠。
修改此外,与所述评论一样 - 您的变量为$registryKey
而非$key
。
答案 1 :(得分:0)
对象可能有magic method __isset()
,如果编码不当,可能会导致一些奇怪的行为。
此外,$registry
可能不是一个简单的数组,而是一个实现ArrayAccess
接口的对象。然后,您必须查找__isset()
魔术方法(如果存在),方法OffsetExists
更准确。