2010-04-07 15 views
5

È più efficiente usare il include_once di PHP o require_once invece di utilizzare un C-like include con una protezione di intestazione?PHP include una volta

cioè,

include_once 'init.php'; 

contro

include 'init.php'; 

//contents of init.php 
if (!defined('MY_INIT_PHP')) { 
    define('MY_INIT_PHP', true); 
    ... 
} 

+5

Si tratta di un collo di bottiglia nelle prestazioni del codice? –

risposta

9

"require_once" e "include_once" sono generalmente un po 'più lenti che richiedono solo "require" e "include" perché eseguono un controllo se il file è già stato caricato in precedenza.

Ma la differenza è importante solo in applicazioni molto complesse in cui è necessario eseguire il caricamento automatico in ogni caso e ciò non richiederebbe require_once/include_once, se il caricatore automatico è ben codificato.

Nella maggior parte delle applicazioni semplici, è preferibile utilizzare require_once/include_once per motivi di praticità.

L'approccio della protezione intestazione è solo un codice disordinato che dovrebbe essere evitato. Immagina, se hai dimenticato il controllo in uno dei tanti file. Il debugging potrebbe essere un incubo.

Basta usare l'autoloading se l'applicazione è adatta. È veloce e il modo più comodo e pulito.

+2

E il '... defined ('MY_INIT_PHP') ...' non è a costo zero. Quindi la domanda sulle prestazioni si ridurrebbe a "è la soluzione php-script più veloce della soluzione interna di php" ... e dubito che per la stragrande maggioranza di tutti i casi. – VolkerK

+1

@ VolkerK Sì, questo si aggiunge anche a questo. Qualsiasi soluzione scritta in codice PHP interpretato è per definizione più lenta delle implementazioni native di PHP. Almeno non riesco a pensare a un caso diverso. – selfawaresoup

1

Si potrebbe provare 10.000 volte con un timer, ma penso che la definizione MY_INIT_PHP è infinitamente più veloce.

Per essere onesti, è probabilmente una differenza così piccola che non c'è bisogno pratico di attenzione se non si lavora per siti come Facebook.

0

Uso sempre REQUIRE_ONCE se il contenuto dello script è univoco.

+0

Anche io uso quasi sempre require_once ... per una ragione diversa: require_once darà un errore fatale se il file è mancante, mentre include_once fornisce solo un avviso in questo caso. Altrimenti, questi due sono equivalenti. – hongliang

2

Mi aspetto che include_once sia più veloce dell'utilizzo di header guard all'interno del file incluso, poiché è ancora necessario aprire e caricare il file in quest'ultimo.

+0

Hai ragione. Avrebbe dovuto chiedere se fosse più veloce di: if (! Defined ('MY_INIT_PHP')) {define ('MY_INIT_PHP', true); include 'init.php';} – webbiedave