2013-03-21 30 views
10

PHPは、名前空間を宣言するための2つの構文を提供しています。以下に示すように、中括弧または中括弧で囲まれた名前空間を使用できます。サスペンダーPHPネームスペース構文:中括弧と中括弧の違いは何ですか?

namespace foo/bar; 
class Any{} 

なし

サスペンダー

namespace foo/bar { 
    class Any{} 
} 

で名前空間を使用して、これらの2つの方法の機能や動作に違いがあるか、彼らは仕事の両方/機能しません同じ方法?

+1

[同じファイル内に複数の名前空間を定義する](http://php.net/manual/en/language.namespaces.definitionmultiple.php) – Clive

+4

なぜこれを閉じるのでしょうか?それは明らかで、有用で、答えることのできる質問のように思えます。その答えは、見つけ出すためのドキュメンテーションを見ているだけではありません。 [名前空間の概要](http://php.net/manual/language.namespaces.rationale.php)と[名前空間の定義](http://php.net/manual/language.namespaces.definition.php)のページは表示されません括弧で囲まれた構文*が存在するということさえ言及されていますが、そこに書かれているいくつかの事実が括弧付きの構文に適用されるのか、私は他の人に同じことをやり直すよう奨励しました。 –

答えて

8

それぞれ異なる理由がありますが、good example on the PHP siteがあります。

名前空間を囲む中括弧を使用する理由は、1つのファイルに複数の名前空間がある場合、または名前空間内に含まれるコードと同じファイル内にグローバルな名前空間以外のコードが必要な場合です。

また、1つのファイルに複数の名前空間がある場合、括弧で囲まれていない構文も許可されます。

PHPのガイドラインによると、これはお勧めできません。できれば、1ファイルにつき1つの名前空間にしておいてください。

+2

"1つのファイルに複数の名前空間がある場合" =>括弧で囲まれていない構文もこれを許可します。 – Jon

5

最初の変更では、ファイルごとに1つの名前空間しか使用できませんが、2番目の名前空間では複数の名前空間を使用できます。 これらは互換的に使用でき、複数の名前空間を定義するために1つのファイルで複数回発生することがあります。中括弧を使用する唯一の理由は、このケースである:上記の例以外にも

namespace { 
    // code is in global scope 
} 

、単一のファイルに複数の名前空間を持つことの潜在的な欠点は、ロードするためのクラスを解決するためのディレクトリとファイル名を使用オートローダです;したがって、のファイルごとに複数の名前空間を使用することはお勧めしません。複数のスクリプトファイルを1つに結合している場合を除きます。

+1

"最初の変種では、ファイルごとに1つの名前空間しか使用できません" => false。 – Jon

+0

... [同じファイル内に複数の名前空間を定義する]の例1を参照してください(http://php.net/manual/en/language.namespaces.definitionmultiple.php) – Clive

+0

@Jonそうです、ありがとう。 –

-2

私は最初のものには "Any"クラスしか含まれていないと思います。しかし、2番目のクラスには中括弧の間のすべてのクラスが含まれます。

+0

いいえ、そのファイル内のすべてのクラスがその名前空間に入ります –

関連する問題