интерфейс instanceof возвращает false в переполнении стека

У меня есть следующая проблема.

У меня была следующая структура:

Interface A {
public function test();
}

class B implements A {
public function test() {
return $something;
}
}

если я позвоню в классе C это:

$someBclass = new B();
if ($someBclass instanceOf A)

Из условия я получил ложь. Есть ли возможность, как проверить, является ли класс b экземпляром интерфейса A? Спасибо

1

Решение

Ваш пример должен вернуть 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 {
// ...
}
1

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

Других решений пока нет …

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