2012-08-26 34 views
6

私はいくつかのクラスとインタフェースでPHPの名前空間を使用しようとしています。PHP名前空間とインターフェイス

インターフェイスと使用されている具体的なタイプの両方にuseステートメントを入れる必要があるようです。これは、インターフェイスを使用する目的を確実に破るようなものですか?

具体的なタイプは互換性がありますようにだから私は、インターフェースの全体のポイントイマイチ

//Interface 
namespace App\MyNamesapce; 
interface MyInterface 
{} 

//Concrete Implementation 
namespace App\MyNamesapce; 
class MyConcreteClass implements MyInterface 
{} 

//Client 
namespace App; 
use App\MyNamespace\MyInterface // i cannot do this!!!! 
use App\MyNamespace\MyConcreteClass // i must do this! 
class MyClient 
{} 

を有することができる - これは確かにその反します。私が何か正しくしていない限り、

答えて

5

具象実装は互換性がありますが、使用する実装のどこかを指定する必要がありますか?

+0

代わりに 'use namespace'を使用するのではなく、代わりにクラスへのフルパスを使用しますか? –

+1

必ずしも、クラスを現在の名前空間にインポートすることもできます。それは単なるスタイルの問題です。 – Niko

+0

はい、私はインターフェイスを使っているので、ネームスペースをインターフェイスにしたいと思っていましたが、実際には反映されていないと意味がありません。より良い選択肢は、私が想定している依存性注入を使用し、相互交換可能なクラスをインスタンス化しないことでしょうか? –