2016-11-19 15 views
0

私はこのような私のクラスのためのインタフェースを宣言するトリングだ:PHPのインターフェイス宣言 - なぜ宣言が混在するのですか?

namespace Helpers\Interfaces { 
    interface Cache { 
     public static function getInstance($profile = null); 
    } 
} 

をそして私は、このようにそれらを適用します。

namespace Helpers { 
    class Cache implements Interfaces\Cache { 
     public static function getInstance($profile = null) { 
      /* ... */ 
     } 
    } 
} 

これまでのところ、とても良い(どうやら、少なくとも)。私が持っている問題は、NetBeansは私のクラスが抽象クラスではなく、特定のメソッドを実装していないというエラーが表示されます。

このメソッドは、オブジェクト(ホスト、ポート、APIキーなど)に応じて特定の設定オプションを指定せずに、特定のメソッドを操作するために必要な設定パラメータを収集するために作成したオブジェクトに属します。

この方法は、この例では、矛盾する宣言は、このインターフェイスから来\Configuration\Helpers\Cache::getConfiguration($profile);

と呼ばれている:

次のように適用される
namespace Configuration\Helpers\Interfaces { 
    interface Cache { 
     public static function getConfiguration($profile = null); 
    } 
} 

namespace Configuration\Helpers { 
    class Cache implements Interfaces\Cache { 
     public static function getConfiguration($profile = null) { 
      /* ... */ 
     } 
    } 
} 

それが効果的に混合ですインタフェースは名前空間ですが、 私は注意したいことは、インターフェイスとそのインターフェイスを実装しているクラス宣言の両方が常に同じファイル(オブジェクトごとに1つのファイル)にあることです。

PHPバージョンはNetBeans 8.2上で7.0.13です。

私は間違っていますか?

答えて

0

あなたのインターフェイスとクラスは異なる名前空間にあります。クラスにuseステートメントを追加する必要があるかもしれません。たとえば、次のように追加することができます:Use Helpers \ Interfaces as Interfaces。この行は、クラス定義の上に置くことができます。class CacheはInterfaces \ Cacheを実装します。

も参照してください。http://php.net/manual/en/language.namespaces.definitionmultiple.php

+0

私は試してみます。ヒントのためにありがとう:) –

+0

いいえ、それはエラー通知dissapearを行いません。しかし、コードを実行しているときに警告やエラーが発生しないので、NetBeansは宣言について不平を言っています。 –

関連する問題