Я создаю фабричный класс 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');
Любая помощь будет принята с благодарностью, документация объясняет эту концепцию глубже.
Ваш тест сводится к следующему:
'SomeNamespace\SomeObject' instanceof $someObj
Ну, строка никогда не является экземпляром класса. Похоже, у вас есть операнды в обратном направлении, и вы хотите:
if ($obj instanceof $nsp)
Это наоборот:
if ($obj instanceof $nsp)