Вернуть объект, который является экземпляром строки

Я создаю фабричный класс Dependency Injection, который позволяет мне переписывать экземпляры снаружи и внутри класса без необходимости перезаписывать его.

У меня проблема, когда я звоню instanceof на объекте, ссылающемся на пространство имен, вот так:

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

Это всегда возвращает ложь. Например, если внутри пространства имен есть объект Test \App\Com он все равно вернул бы false. (Посмотрите, как это работает здесь)

Если вы не можете перейти по ссылке выше, у меня есть 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');

Любая помощь будет принята с благодарностью, документация объясняет эту концепцию глубже.

-2

Решение

Ваш тест сводится к следующему:

'SomeNamespace\SomeObject' instanceof $someObj

Ну, строка никогда не является экземпляром класса. Похоже, у вас есть операнды в обратном направлении, и вы хотите:

if ($obj instanceof $nsp)
1

Другие решения

Это наоборот:

if ($obj instanceof $nsp)
1

По вопросам рекламы [email protected]