2013-03-21 14 views
10

PHP offre due sintassi per la dichiarazione degli spazi dei nomi. Puoi utilizzare uno spazio dei nomi senza parentesi o con parentesi graffe come mostrato di seguito.Namespace PHP Sintassi: qual è la differenza tra parentesi graffe e senza parentesi?

Senza Bretelle

namespace foo/bar; 
class Any{} 

con bretelle

namespace foo/bar { 
    class Any{} 
} 

C'è una differenza nella funzionalità o il comportamento di questi due modi di usare gli spazi dei nomi o se invece sia il lavoro/funzione della stessa strada?

+1

Vedere [Definire più spazi dei nomi nello stesso file] (http://php.net/manual/en/language.namespaces.definitionmultiple.php) – Clive

+4

Perché chiuderlo, mi chiedo? Sembra una domanda chiara, utile e comprensibile, la cui risposta richiede più di una rapida occhiata alla documentazione da trovare. Le pagine [Namespaces Overview (http://php.net/manual/language.namespaces.rationale.php) e [Defining Namespaces] (http://php.net/manual/language.namespaces.definition.php) don Si può anche menzionare che la sintassi tra parentesi * esiste *, il che lascia aperta la questione se i diversi fatti documentati là si applichino alla sintassi tra parentesi o solo alla sintassi non derivata. Ho votato per riaprire e incoraggiare gli altri a fare lo stesso. –

risposta

8

Ci sono diversi motivi per ogni caso, c'è un good example on the PHP site.

Il motivo per cui si utilizzano parentesi graffe attorno a uno spazio dei nomi è se ci sono più spazi dei nomi in un unico file o in cui è necessario disporre di codice globale non assegnato allo stesso nello stesso file del codice contenuto in uno spazio dei nomi.

Inoltre, se in un file sono presenti più spazi dei nomi, è consentita anche la sintassi non a forcella.

Come da linee guida php, questo non è raccomandato e, se è possibile, basta tenerlo in uno spazio dei nomi per file.

+2

"se ci sono più spazi dei nomi in un file" => anche la sintassi non a parentesi consente questo. – Jon

5

Nella prima variante, è possibile utilizzare solo uno spazio dei nomi per file, mentre il secondo consente più spazi dei nomi. Possono essere utilizzati in modo intercambiabile e possono verificarsi più volte in un singolo file per definire più spazi dei nomi. L'unica ragione per usare le parentesi graffe in questo caso:

namespace { 
    // code is in global scope 
} 

Altro che l'esempio precedente, un potenziale svantaggio di avere più spazi dei nomi in un unico file è caricatori automatici che utilizzano i nomi delle directory e dei file per risolvere classi per caricare ; non è quindi consigliabile avere più di uno spazio dei nomi per file, a meno che non sia che si combinano più file di script in uno solo.

+1

"Nella prima variante, puoi usare solo uno spazio dei nomi per file" => false. – Jon

+0

Non vero ... vedere l'esempio 1 di [Definire più spazi dei nomi nello stesso file] (http://php.net/manual/en/language.namespaces.definitionmultiple.php) – Clive

+0

@Jon Giusto, grazie per questo . –

-2

Penso che il primo includa solo la classe "Any". Ma il secondo include tutte le classi tra parentesi graffe.

+0

No, tutte le classi in quel file si troveranno in quello spazio dei nomi –

Problemi correlati