名前の衝突が起こるので使用できません。そのため、識別子は長くなりがちですが、PHP5.3から追加された名前空間という機能を利用することで名前の衝突を避けることができます。名前空間とは、OSのディレクトリに似た概念で、同じ名前でも名前空間(ディレクトリ)が違えば、使用することができます。名前空間を定義するには、namespaceキーワードを使用して名前空間を宣言します。名前空間の影響を受けるのは、クラス、インターフェイス、関数、constで定義された定数です。変数やdefine()関数で定義された定数は影響を受けません。下記の例では、namespaceキーワードでTestという名前空間を宣言しています。使用してもエラーになりません。'Test\E_USER_ERROR';?&gt;namespace宣言の前に記述できるのは、declare文のみです。PHPコード以外でも、namespace宣言の前に記述することはできません。errorとなります。名前空間には、ディレクトリと同じように階層構造を持たせることができます。階層化させるには、名前空間をバックスラッシュ(\)で区切ります。下記の例では、Fooがサブ名前空間になります。同一ファイル内で複数の名前空間を使用する方法が2通りあります。1つ目の方法は、名前空間を変更したい箇所でnamespaceキーワードで名前空間を宣言します。この書式では名前空間に属さないグローバルな空間を宣言することができません。第3者が見ても非常に解りにくいので、この書式は推奨されていません。出力:Test\Foo\E_USER_ERROR?&gt;2つ目の方法は、namespace宣言に続く文を波括弧{}で囲う方法です。この書式では、グローバルな空間も宣言することができますが、波括弧の外側に書くことができるのは最初のdeclare文だけです。根本的な問題として、同一ファイル内で複数の名前空間を使用するのは、第3者が見て解りにくいので、できる限り避けるべきでしょう。区切り文字(\)を含まない識別子は、非修飾名と呼ばれます。非修飾名では、現在の名前空間の識別子にアクセスします。区切り文字(\)を含む識別子は、修飾名と呼ばれます。修飾名では、現在の名前空間からの相対位置にある名前空間の識別子にアクセスします。区切り文字(\)で始まる識別子は、完全修飾名と呼ばれます。完全修飾名では、グローバルな名前空間からの絶対位置にある名前空間の識別子にアクセスします。ディレクトリに例えると絶対パスに似ています。出力:Test\Foo\E_USER_ERROR}?&gt;注意すべき点として、非修飾名の関数や定数が現在の名前空間に見つからなかった場合、PHPは自動的にグローバル空間にアクセスして関数や定数を探します。errorとなります。可変変数や可変関数と同じように変数に文字列を代入して、動的に名前空間を参照することができます。動的な名前空間の参照では、常に完全修飾名として扱われるため、先頭のバックスラッシュ(\)はなくても構いません。マジック定数は、現在の名前空間を文字列で保持しています。グローバルな名前空間では空文字列となります。識別子にnamespaceキーワードを付けると現在の名前空間やサブ名前空間を明示的に指定することができます。出力:Test\E_USER_ERROR}?&gt;名前空間のエイリアス・インポートPHPでは、別の名前空間やそれに属するクラス、インターフェイスのエイリアスを作ることができます。これは、ディレクトリのシンボリックリンクの概念に似ています。エイリアスを作るには、useキーワードでインポートする名前空間、クラス名、インターフェイス名を指定し、asキーワードで別名を指定します。asキーワードを省略した場合、useで指定した1番右側の非修飾名が別名となります。useで指定する名前空間は、常に完全修飾名として扱われるため、先頭のバックスラッシュは不要です。includeやrequireで読み込んだファイルは、読み込み元のファイルのエイリアスを引き継ぎません。同一ファイル内で名前空間を変更した場合もエイリアスを引き継ぎません。関数や定数のエイリアスはサポートされていませんが、名前空間のエイリアス経由でアクセスすることはできます。出力:Test\Baz}?&gt;インポートはコンパイル時に行われるため、名前空間のエイリアスを動的に参照することはできません。errorとなります。