2012-01-18 5 views
4

このPHPメソッド宣言で、型ヒントの名前空間を認識できないのはなぜですか?私はこのインタフェースを提供し<a href="https://github.com/l3pp4rd/DoctrineExtensions" rel="nofollow">Doctrine Extensions</a>に基づいてライブラリーを、書き込みしようとしている

私自身のコードで
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

+1

2番目のコードで誤ったセミコロンが使用されていますか? – TimWolla

+1

あなたのネームスペースに独自の 'ClassMetadata'-classまたは-interfaceがありますか? – KingCrunch

+0

入力ミスを修正しました。 @ KingCrunch、いいえ、私はどこでもそのクラスの私自身の定義を持っていません。たとえ私がしたとしても、 "use"節に指定された名前が優先されるのではないでしょうか? –

答えて

1

方法はClassMetadataタイプのヒントを持っていないようです。

使用しているものを確認してください。

+0

このライブラリの[最近の変更](https://github.com/l3pp4rd/DoctrineExtensions/commit/afbf04fd8aeb1567d98da39dacb64961270e992f)のようです。それでも、同じメソッドシグネチャと見なさない理由が混乱しています。 –

関連する問題