Return 作为字符串实例的对象

Return an object that is an instanceof a string

我正在创建一个依赖注入工厂 class,它允许我在 class 外部和内部重写实例,而不必继续覆盖它。

我遇到的问题是当我在引用命名空间的对象上调用 instanceof 时,如下所示:

if($nsp instanceof $obj)
{
    return $obj::getInstance();
}

它总是 return 错误。例如,如果在命名空间 \App\Com 中有一个 Test 对象,它仍然会 return false。 (See it working properly here)

如果您不能访问上面的 link,我有一个 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.");
}

并且可以这样调用/使用:

Service::getInstance()->using('SomeNamespace\SomeObject');

任何帮助将不胜感激,documentation 更深入地解释了这个概念。

您的测试归结为:

'SomeNamespace\SomeObject' instanceof $someObj

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

if ($obj instanceof $nsp)

相反:

if ($obj instanceof $nsp)