Pro e contro dei namespace vs include / require in PHP?

18

Recentemente ho iniziato a utilizzare gli spazi dei nomi in PHP. Quando li ho visti per la prima volta, ho pensato che la loro sintassi fosse brutta e che non li avrei mai usati. Tuttavia, ho creato un autoloader (spl_autoload_register) che lo rende cosicché non debba mai più scrivere un'istruzione include / require.

Mi piacciono gli spazi dei nomi, ma c'è qualche vantaggio oggettivo sulle istruzioni include / require, o sono esattamente lo stesso metodo per raggiungere lo stesso obiettivo?

    
posta NobleUplift 16.12.2013 - 17:54
fonte

1 risposta

19

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 o anche , lingue non interpretate come PHP.

    
risposta data 16.12.2013 - 18:09
fonte

Leggi altre domande sui tag