我正在创建一个Dependency Injection工厂类,它允许我在类外部和内部重写实例,而不必继续覆盖它。
我遇到的问题是当我在引用命名空间的对象上调用__init__
时,如下所示:
instanceof
它总是返回false。例如,如果命名空间if($nsp instanceof $obj)
{
return $obj::getInstance();
}
中有一个Test对象,它仍然会返回false。 (See it working properly here)
如果你不能访问上面的链接,我有一个\App\Com
,它包含一系列预实例化对象。然后该方法如下所示:
protected $_case
可以像这样调用/使用:
public function using($nsp)
{
foreach($this->_case as $obj)
{
if($nsp instanceof $obj)
{
return $obj::getInstance();
}
}
throw new \Exception("Call to $nsp did not match any libraries.");
}
非常感谢任何帮助,documentation更深入地解释了这个概念。
答案 0 :(得分:1)
您的测试归结为:
'SomeNamespace\SomeObject' instanceof $someObj
嗯,字符串永远不是类的实例。看来你有倒退的操作数,你想要的是:
if ($obj instanceof $nsp)
答案 1 :(得分:1)
反过来说:
if ($obj instanceof $nsp)