У меня есть следующая проблема.
У меня была следующая структура:
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;
}
И ваш класс C выглядит так:
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 {
// ...
}