Я пытаюсь написать библиотеку на основе расширений Doctrine, которая предоставляет следующий интерфейс:
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
.
Почему подсказка типа не распознается?
ClassMetadata
-класс или -интерфейс в вашем пространстве имен? - person KingCrunch   schedule 19.01.2012