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
}
}
私が手にエラーが言います: Avid \ Schedulable \ Mapping \ Driver \ Annotation :: readExtendedMetadata()の宣言は、Gedmo \ Mapping \ Driver :: readExtendedMetadata()と互換性がなければなりません。
ClassMetadata
タイプのヒントを削除するとエラーを回避できます。
私は、ネームスペースが一致していないときにこのエラーが発生するとの情報をGoogle検索しました。これは自分自身の名前空間でこのクラスを宣言しているので意味がありますが、元のDriver
インターフェイスで使用されている同じDoctrine名前空間の別名はClassMetadata
です。
タイプヒントが認識されないのはなぜですか?ここDriver
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/lib/Gedmo/Mapping/Driver.php で
2番目のコードで誤ったセミコロンが使用されていますか? – TimWolla
あなたのネームスペースに独自の 'ClassMetadata'-classまたは-interfaceがありますか? – KingCrunch
入力ミスを修正しました。 @ KingCrunch、いいえ、私はどこでもそのクラスの私自身の定義を持っていません。たとえ私がしたとしても、 "use"節に指定された名前が優先されるのではないでしょうか? –