2017-02-15 9 views
0

私はいくつかのプロジェクトで同じバージョンのライブラリを使用しています。PHP名前空間エイリアスは競合していますか?

プロジェクトA:

namespace Ewout\Project_A\Compatibility; 
Class Core {} 

プロジェクトB:ライブラリは、次のように名前空間されてどこにでも完全な名前空間を使用しないようにするに

namespace Ewout\Project_B\Compatibility; 
Class Core {} 

...など

、私はそれらをエイリアスプロジェクトのPHPファイル:

プロジェクトA(a/main.php):

use Ewout\Project_A\Compatibility\Core as CoreX; 

プロジェクトB(B/main.php):

use Ewout\Project_B\Compatibility\Core as CoreX; 

は、このOKですか? Project_A\Compatibility\CoreProject_B\Compatibility\Coreクラスを同じファイルにエイリアスする必要はありませんが、プロジェクトスクリプトは同時にロードできます。グローバルな名前空間にはCoreXクラスがありません(私のテストから、どちらの問題も起こらないでしょうか?)。

私はPHPをテストしましたが、コンフリクトに関するPHPのエラーはまだありませんでしたが、問題が発生しないことを確認します。

+1

これは矛盾が発生することはありません。しかし、尋ねる前にコードをテストしてください。 – Ad5001

+0

私はこれをテストしました: "私はPHPからの紛争についての不平はまだ見ていませんが、これが問題を引き起こさないことを確かめたいと思います。 – Ewout

+0

ああ、ごめんなさい。しかし、長い間、/ main.phpと/b/main.phpを組み合わせないと、問題はありません。 – Ad5001

答えて

0

これ以上のテストを行っても問題は発生しないことが確認できます。 PHPはファイルごとにエイリアスを処理するので、あるファイルのエイリアスは、メインスクリプトにインクルードされていても別のエイリアスには影響しません。

さらに

、これは基本的なプロセスを理解するのに役立ちます:

どのように名前解決のような修飾されていないクラス名?

バックスラッシュのような名前を含まないクラス名は、2つの方法で解決できます。

名前に別名を別名で割り当てるインポート文がある場合、インポートエイリアスが適用されます。

それ以外の場合は、現在の名前空間名が名前の前に付加されます。

これはエイリアスと同じ名前を持つグローバルな名前空間内のクラスがありますとき、これは任意の直接の競合が発生しないことを意味し、それは単にグローバル名前空間のクラスの上に別名の優先順位を決定します。 PHPのドキュメントで

もっと有用な情報:FAQ: things you need to know about namespaces

関連する問題