2013-03-15 1 views
5

Ho iniziato a creare la mia libreria di codici da PHP 4. Ho usato require_once per importare classi. Ora con PHP 5.3 ho incontrato la definizione degli spazi dei nomi e l'importazione.Importazione di uno spazio dei nomi rispetto ai file in PHP

Desidero modificare i file di origine per utilizzare l'importazione (istruzione use) anziché utilizzare require_once. Questa è la decisione giusta, non sono sicuro.

Immagino che sarebbe facile. Definire lo spazio dei nomi nella parte superiore dei file di classe e fare una ricerca & sostituire su altri file che li utilizzano (sostituire require_once con use). In pratica, cosa potrebbe andare storto?

E ci sarà un miglioramento delle prestazioni? Nel file incluso è ovvio come PHP trovi il file. Ma all'importazione di spazi dei nomi non è così ovvio. C'è una perdita di prestazioni nella ricerca di spazi dei nomi e indicizzazione da parte di PHP?

risposta

16

use e require_once sono cose completamente diverse. use non sta effettuando alcuna importazione di file. use ti semplifica la vita. Invece di scrivere Full\Path\To\Class ogni volta, si può fare

use Full\Path\To\Class 

$bar = new Class(); 

Il tuo è ancora responsabile per includere i file corretti.

Invece di caricare tutti i file a mano, è possibile fare affidamento su PHP auto class loading.

È possibile utilizzare Composer o Framework come Symfony 2 o Zend2 che gestiscono tutti gli elementi di caricamento automatico per l'utente.

La migrazione del codice esistente per utilizzare l'autoloading e le dichiarazioni use anziché include_once possono richiedere molto tempo. Probabilmente non esiste una ricerca e una soluzione sostitutiva.

+0

grazie, non ho notato il caricamento automatico della classe. Tuttavia sembra una cattiva pratica, che può essere implementata solo in un linguaggio interprete. Aggiunge un sovraccarico come la ricerca di un intero percorso per una classe e porta a una cattiva documentazione che non si sa quale file usi cosa. – bkilinc

+0

Non ho mai visto alcun problema di prestazioni, a causa del caricamento automatico della classe. Se usi gli strumenti menzionati puoi vedere che fanno molto per assicurarti che la ricerca sia veloce. Dopotutto Java sta facendo questo successo per oltre un decennio. E, ultimo ma non meno importante: affidarsi a semplici regole per il caricamento di inclusioni/classi semplifica considerevolmente il tuo codice. – BetaRide

+0

@bkilinc: standard come PSR-0 consentono di utilizzare regole coerenti per l'autoloading in tutta l'applicazione. Se l'intera libreria applica lo stesso standard, è possibile utilizzare un singolo caricatore automatico per l'intera applicazione. Ciò consente di scrivere codice OOP molto modulare senza preoccuparsi delle dipendenze, riducendo al contempo il sovraccarico delle prestazioni. –