У меня есть следующая проблема.
У меня была следующая структура:
Interface A {
public function test();
}
class B implements A {
public function test() {
return $something;
}
}
если я позвоню в классе C это:
$someBclass = new B();
if ($someBclass instanceOf A)
Из условия я получил ложь. Есть ли возможность, как проверить, является ли класс b экземпляром интерфейса A? Спасибо
Ваш пример должен вернуть true, я думаю, что вы тестируете интерфейс из другого файла, и вам не хватает use A;
в вашем классе C
,
Также вы должны использовать полное пространство имен, чтобы проверить, является ли ваш класс экземпляром вашего интерфейса.
Если у вас есть такой интерфейс:
namespace MyNamespace;
Interface A {
public function test();
}
Класс B, как это:
namespace MyNamespace;
class B implements A {
public function test() {
return $something;
}
И ваш класс С выглядит так:
namespace MyNamespace\Util;
class C {
// ...
$someBclass = new B();
if ($someClassB instanceof A){
die('InstanceOf');
} else {
die('Not instanceOf');
}
// Output: Not instanceOf
if ($someClassB instanceof \MyNamespace\A){
die('InstanceOf');
}
// Output: InstanceOf;
// ...
}
Или вы можете добавить use
заявление :
namespace MyNamespace\Util;
use MyNamespace\A;
class C {
// ...
}
Других решений пока нет …