Gli spazi dei nomi non sono solo per le classi di autoloading. Inoltre prevengono i conflitti di denominazione. In realtà, questo è il loro scopo principale.
Supponiamo che tu abbia un progetto che ha bisogno di una classe chiamata User
, per memorizzare informazioni sugli utenti della tua applicazione, ma un plugin usa anche una (diversa) classe chiamata User
per memorizzare le informazioni. I namespace ti permettono di creare la tua classe all'interno di uno spazio dei nomi (ad esempio, MyApp
) e lasciare che il plugin usi un altro spazio dei nomi (ad esempio, CoolPlugin
). Il codice all'interno dello spazio MyApp
può solo fare riferimento a User
(ad esempio new User();
), e quindi può codice nello spazio CoolPlugin
; ognuno otterrà il risultato atteso. Quando hai bisogno di usare il codice da un altro spazio dei nomi, devi solo prefissarlo. Ad esempio, il codice nello spazio CoolPlugin
può accedere alla classe User
in MyApp
tramite new \MyApp\User();
L'alternativa è che ogni classe ha bisogno di un nome complesso ovunque , come class MyApp_User
e class CoolPlugin_User
. I namespace ti permettono di semplificare le cose il più delle volte ed evitare sempre conflitti di denominazione.
Modifica: per rispondere alla domanda, "C'è qualche differenza di prestazioni tra i due?"
Non significativo, no. Non l'ho confrontato, ma probabilmente c'è una differenza a livello di nanosecondo. Detto questo, sacrificare la qualità del codice per ritocchi di prestazioni super-piccoli non è una buona strategia, quindi dovresti usare lo spazio dei nomi a prescindere. Per i benchmark di tipi simili di problemi, vedi PHPbench.com e questa risposta StackOverflow .
Il tuo codice deve essere incredibilmente stretto e incredibilmente sensibile al tempo (pensa al trading ad alta frequenza o alla gestione delle reazioni nucleari) prima di preoccuparti di micro-ottimizzarlo in questo tipo di contesto. Se è davvero così sensibile al tempo, dovresti probabilmente scrivere in c o anche assembly , lingue non interpretate come PHP.