【发布时间】:2017-05-05 16:58:09
【问题描述】:
我正在创建一个依赖注入工厂类,它允许我在类外部和内部重写实例,而无需继续覆盖它。
我遇到的问题是当我在引用命名空间的对象上调用 instanceof 时,如下所示:
if($nsp instanceof $obj)
{
return $obj::getInstance();
}
它总是返回 false。例如,如果命名空间 \App\Com 中有一个 Test 对象,它仍然会返回 false。 (See it working properly here)
如果您无法访问上述链接,我有一个 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 更深入地解释了这个概念。
【问题讨论】:
-
投反对票?解释这个问题是如何被问错的,而不是仅仅投反对票,这样我就可以改进它。
-
$obj是一个类的 instance(它可以是任何类),$nsp是一个包含 namespace 和类名 比如\App\Com\Foo.. 我想基本上用那个字符串来检查对象数组并返回对应的实例@deceze see what i mean
标签: php oop namespaces instanceof