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)
我正在创建一个依赖注入工厂 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)