返回作为字符串实例的对象

时间:2016-12-20 12:58:33

标签: php oop namespaces instanceof

我正在创建一个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更深入地解释了这个概念。

2 个答案:

答案 0 :(得分:1)

您的测试归结为:

'SomeNamespace\SomeObject' instanceof $someObj

嗯,字符串永远不是类的实例。看来你有倒退的操作数,你想要的是:

if ($obj instanceof $nsp)

答案 1 :(得分:1)

反过来说:

if ($obj instanceof $nsp)