Почему это объявление метода PHP не распознает пространство имен подсказки типа? - PullRequest
4 голосов
/ 19 января 2012

Я пытаюсь написать библиотеку на основе Doctrine Extensions , которая обеспечивает этот интерфейс:

namespace Gedmo\Mapping;

use Doctrine\Common\Persistence\Mapping\ClassMetadata;

interface Driver {
  public function readExtendedMetadata(ClassMetadata $meta, array &$config);

  public function setOriginalDriver($driver);
}

В своем собственном коде я реализую этот интерфейс:

namespace Avit\Schedulable\Mapping\Driver;

use Gedmo\Mapping\Driver,
    Doctrine\Common\Persistence\Mapping\ClassMetadata,
    Doctrine\Common\Annotations\AnnotationReader;

class Annotation implements Driver {
  public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
    // my implementation
  }
}

Получаемая ошибка говорит: Объявление Avit \ Schedulable \ Mapping \ Driver \ Annotation :: readExtendedMetadata () должно быть совместимо с Gedmo \ Mapping \ Driver :: readExtendedMetadata ()

Я могу избежать ошибки, если уберу подсказку типа ClassMetadata в моем методе.

Я погуглил некоторую информацию о том, что эта ошибка возникает, когда пространство имен не соответствует. Это имеет смысл, так как я объявляю этот класс в своем собственном пространстве имен, однако я псевдоним того же пространства имен Doctrine для ClassMetadata, которое использует оригинальный интерфейс Driver.

Почему подсказка типа не распознается?

1 Ответ

1 голос
/ 19 января 2012

Метод в Driver здесь https://github.com/l3pp4rd/DoctrineExtensions/blob/master/lib/Gedmo/Mapping/Driver.php, кажется, не имеет подсказки типа ClassMetadata.

Не возражаете, если отметите тот, который вы используете?

...