【问题标题】:Return an object that is an instanceof a string返回一个作为字符串实例的对象
【发布时间】: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


【解决方案1】:

您的测试归结为:

'SomeNamespace\SomeObject' instanceof $someObj

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

if ($obj instanceof $nsp)

【讨论】:

  • 感谢,我已经在谷歌上搜索了很久。也许我只是度过了其中一个愚蠢的日子,非常感谢!
【解决方案2】:

反过来说:

if ($obj instanceof $nsp)

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2014-08-05
    • 2015-10-24
    • 2013-02-23
    • 2022-01-18
    • 1970-01-01
    • 2018-08-12
    • 2011-06-14
    相关资源
    最近更新 更多