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

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

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

Interface A {
public function test(); 
}

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

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

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

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


person XWizard    schedule 23.01.2016    source источник
comment
классы не являются экземплярами интерфейсов, но реализуют их: php: class_implements   -  person Franz Gleichmann    schedule 23.01.2016
comment
Должен возвращать истину - Demo и см. пример №4 в документации PHP   -  person Mark Baker    schedule 23.01.2016
comment
Взгляните на другой ответ: stackoverflow.com/questions/274360/ может вам помочь.   -  person Igor Scabini    schedule 23.01.2016


Ответы (1)


Ваш пример должен возвращать истину, я думаю, вы тестируете интерфейс из другого файла, и вам не хватает use A; в вашем классе C.
Также вам нужно использовать полное пространство имен, чтобы проверить, является ли ваш класс экземпляром вашего интерфейса.

Если у вас есть такой интерфейс:

namespace MyNamespace;

Interface A {
    public function test(); 
}

А класс Б вот так:

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 {
    // ...
}
person chalasr    schedule 23.01.2016