Интерфейс PHP в расширенном классе не распознается как экземпляр - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть абстрактный класс A, который расширен классом B, который реализует интерфейс I.

abstract class A {
  public function test(){
    return $this->getX();
  }
  abstract protected function getX();
}

class B extends A implements I {
  public function Test() {
    $x = this->getX();
    if (!$x instanceof I) {
      throw new RuntimeException("not an instance of I");
    }
  }

  public function getX() {
    $aCoordinates = array('x' => 1, 'y' => 4, 'z' => 5); 
    return $aCoordinates;
  }
}

interface I {}

RuntimeException всегда выбрасывается, несмотря на то, что $x является экземпляром I. У кого-нибудь есть идея, почему это происходит?

getX() возвращает массив. getX() является просто примером для функции, возвращающей массив.

1 Ответ

0 голосов
/ 19 ноября 2018

Метод getX() не возвращает никаких данных. Поэтому значение $x равно null;, чтобы иметь экземпляр объекта интерфейса I, в метод getX() необходимо поместить return $this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...