2010-10-11 11 views
12

Se effettuo una dichiarazione include o require all'interno di un condizionale che restituisce false, sarà l'interprete PHP saltare il file di inclusione del tutto, o sarà caricarlo per ogni evenienza?comportamento PHP di include/richiedono all'interno condizionale

Un esempio potrebbe essere:

if ($some_user_var) { 
    require 'this.php'; 
} else { 
    //do stuff 
} 

Ho letto da qualche parte che require saranno sempre inclusi dall'interprete a prescindere dalla condizione, ma include non lo farà. In questo caso, passare da require a include potrebbe significare una riduzione gratuita a causa della riduzione dell'I/O e dell'overhead di analisi.

Probabilmente fa la differenza se sto eseguendo un preprocessore come eAccelerator, ma supponiamo di no.

+0

Penso che quello che hai letto da qualche parte fosse qualcosa del genere: 'require' interromperà l'esecuzione con un errore fatale mentre' include' non lo farà (in caso negativo, ovviamente). Che può essere interpretato come 'require' includerà sempre il tuo file o lo script morirà. – acm

+0

Per caso possiedi questo libro? http://www.amazon.co.uk/PHP-World-Wide-Web-Quickstart/dp/0321245652 Mi è stata insegnata anche questa bugia! – Matthew

risposta

20

Sarà incluso solo se la condizione è vera. Non so dove leggi altrimenti, ma hanno torto.

L'unica differenza tra include e require è che include sarà lanciare un avvertimento se non riesce, mentre require sarà lanciare un errore fatale.

Per confermare questo, vedere the PHP manual page for require.

(ps - se stai facendo condizionale comprende, a seconda di ciò che il reaon è, si può considerare l'utilizzo di include_once() o require_once() invece)

+1

IIRC, il comportamento che descrive era il caso fino a PHP 4.qualcosa. –

+0

Oh, in realtà sto usando require_once, ho solo semplificato per il gusto della domanda. Ma grazie –

+0

Grazie per il collegamento alla pagina di manuale. Da uno dei commenti: "Poiché gli stati manuali richiedono e require_once come da PHP 4.02 non chiamano più il file se la riga di codice su cui si trova non deve essere eseguita". Perfetto :) –

1

Questo non è corretto. require non includerà i file che sono racchiusi in blocchi dove non vengono mai chiamati, l'interprete PHP non li ignora. include e require hanno poca o nessuna differenza dal punto di vista delle prestazioni (anche se non hanno molta differenza da _once, anche se è più significativo).

1

ho letto da qualche parte troppo. L'argomento è simile a questo:

Se si inserisce una condizione attorno a un inclusivo, PHP non ha modo di sapere se è necessario o meno fino a quando non inizia a interpretare il codice e non può interpretare il codice finché non ottiene tenere tutte le variabili e le funzioni e quindi - i file. Quindi carica tutti i file a prescindere dalle condizioni e poi li ritira dalla "compilation" finale.

Anche se, di nuovo, se si avvolge una condizione attorno a un file PHP con un errore, esso non lo infrange. E se dichiari una variabile in un file incluso e poi usi il valore della variabile per determinare se includerla o meno, non ne raccoglie il valore :)

Forse questo era un problema nelle vecchie versioni di PHP?

Non l'ho provato per quanto riguarda la velocità di caricamento e l'utilizzo della RAM, ma mi piacerebbe avere una risposta definitiva a questo. C'è NESSUN sovraccarico in questione con include condizionale?

+0

Buona osservazione sull'inclusione di file con errori. Se si stava caricando di loro, si sarebbe in grado di verificarlo includendo un file esplosivo. – Frug

Problemi correlati