2013-03-21 21 views
10

PHP oferuje dwie składnie do deklarowania przestrzeni nazw. Możesz użyć przestrzeni nazw bez nawiasów klamrowych lub z nawiasami klamrowymi, jak pokazano poniżej.Składnia nazw PHP: Jaka jest różnica w nawiasach klamrowych vs. bez nawiasów klamrowych?

bez nawiasów

namespace foo/bar; 
class Any{} 

z szelkami

namespace foo/bar { 
    class Any{} 
} 

Czy istnieje różnica w funkcjonalności i zachowania tych dwóch sposobów wykorzystywania nazw, czy też zarówno praca/działają tak ta sama droga?

+1

Zobacz [Definiowanie wielu przestrzeni nazw w tym samym pliku] (http://php.net/manual/en/language.namespaces.definitionmultiple.php) – Clive

+4

Dlaczego to się zastanawia? Wydaje się, że jest to jasne, użyteczne i podlegające odpowiedzi pytanie, którego odpowiedź nie polega na pobieżnym spojrzeniu na dokumentację. Omówienie przestrzeni nazw (http://php.net/manual/language.namespaces.rationale.php) i [Define names names] (http://php.net/manual/language.namespaces.definition.php) pages don 'nawet wspomnieć, że składnia w nawiasach * istnieje *, co pozostawia otwartą kwestię, czy kilka faktów tam udokumentowanych odnosi się do składni nawiasów lub tylko do składni nieskortowanej. Głosowałem za ponownym otwarciem i zachęcałem innych do tego samego. –

Odpowiedz

8

Istnieją różne powody dla każdego przypadku, jest good example on the PHP site.

Powodem używania nawiasów klamrowych w przestrzeni nazw jest to, że w jednym pliku znajduje się wiele przestrzeni nazw lub gdy potrzebny jest globalny kod bez nazwy w tym samym pliku co kod znajdujący się w obszarze nazw.

Również jeśli w jednym pliku znajduje się wiele przestrzeni nazw, dozwolona jest także składnia o nieokreślonym nawiasie.

Zgodnie z instrukcjami php nie jest to zalecane, a jeśli to możliwe, po prostu zachowaj jeden obszar nazw na plik.

+2

"jeśli istnieje wiele przestrzeni nazw w jednym pliku" => pozwala na to również składnia bez wartości bloków. – Jon

5

W pierwszym wariancie można użyć tylko jednej przestrzeni nazw na plik, podczas gdy druga pozwala na wiele przestrzeni nazw. Mogą być używane zamiennie i mogą występować wiele razy w jednym pliku w celu zdefiniowania wielu przestrzeni nazw. Jedynym powodem, aby użyć nawiasów klamrowych jest w tym przypadku:

namespace { 
    // code is in global scope 
} 

Poza powyższym przykładzie, potencjalny Minusem posiadania wielu nazw w jednym pliku jest Autoloadery używające nazwy katalogów i plików, aby rozwiązać klas do załadowania ; w związku z tym nie zaleca się posiadania więcej niż jednego obszaru nazw dla jednego pliku, chyba żełączysz wiele plików skryptów w jeden.

+1

"W pierwszym wariancie możesz użyć tylko jednej przestrzeni nazw na plik" => fałsz. – Jon

+0

Nieprawda ... zobacz przykład 1 z [Definiowanie wielu przestrzeni nazw w tym samym pliku] (http://php.net/manual/en/language.namespaces.definitionmultiple.php) – Clive

+0

@Jon Dobrze, dzięki za to . –

-2

Myślę, że pierwszy obejmuje tylko klasę "Any". Ale druga obejmuje wszystkie klasy między nawiasami klamrowymi.

+0

Nie, wszystkie klasy w tym pliku będą znajdować się w tym obszarze nazw –

Powiązane problemy