интерфейс instanceof возвращает false в php

1

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

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

Interface A {
public function test(); 
}

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

если я вызову в классе C:

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

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

  • 0
    классы не являются экземплярами Интерфейсов, но реализуют их: php: class_implements
  • 0
    Должен вернуть true - демо и посмотреть пример # 4 в PHP Docs
Показать ещё 1 комментарий
Теги:
interface
instanceof

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню