2009-05-10 15 views
6

C'è qualche differenza di velocità traCosa c'è di meglio, isset o no?

if (isset($_POST['var'])) 

o

if ($_POST['var']) 

E che è meglio o sono la stessa cosa?

+4

Chiaramente, ci vuole più tempo per digitare isset():/ –

+0

Mi chiedevo solo se ci fosse un vero motivo per cui sarebbe necessario in questo caso. Immagino di no – James

risposta

17

È buona norma utilizzare isset per le seguenti ragioni:

  • Se $_POST['var'] è una stringa vuota o "0", isset sarà ancora rilevare che esiste la variabile.
  • Non utilizzare isset genererà un avviso.
13

Non sono la stessa cosa. Si consideri una matrice nozionale:

$arr = array(
    'a' => false, 
    'b' => 0, 
    'c' => '', 
    'd' => array(), 
    'e' => null, 
    'f' => 0.0, 
); 

Supponendo $x è uno di quei tasti ('a' alla 'f') e la chiave 'g' che non c'è funziona in questo modo:

  • $arr[$x] è false per tutte le chiavi da a a g;
  • isset($arr[$x]) è true per le chiavi a, b, c, def ma false per eeg; e
  • array_key_exists($x, $arr) è true per tutte le chiavi da a af, false per g.

Suggerisco di guardare PHP's type juggling, in particolare la conversione in booleani.

Infine, quello che stai facendo si chiama micro-optimization. Non scegliere mai quale di quelli da cui si ritiene che sia più veloce. Qualunque sia la più veloce è così trascurabile nella differenza che dovrebbe essere mai essere un fattore anche se si potesse determinare in modo affidabile quale sia più veloce (che non sono sicuro che si possa fare a qualsiasi livello statisticamente significativo).

+0

cletus ha ragione - una query SQL sarà mille volte più lenta di mille assegni di isset. Vale anche la pena notare che se ($ arr ['g']) verrà generata una variabile "Undefined" di E_NOTICE. – Shabbyrobe

4

isset verifica che la variabile abbia un valore, mentre il valore if verifica il valore della variabile.

Ad esempio:

// $_POST['var'] == 'false' (the string false) 
if (isset($_POST['var'])) { 
    // Will enter this if 
} 
if ($_POST['var']) { 
    // Won't enter this one 
} 

Il grosso problema è che l'equivalenza delle due espressioni dipende dal valore della variabile si sta verificando, quindi non si può fare ipotesi.

+0

Ho la sensazione che sia necessaria una piccola correzione sulla prima riga. isset non "verifica che la variabile abbia alcun valore" verifica se è stata istanziata/creata '$ a = ''; isset ($ a); 'valuterà in vero. –

1

Nel rigoroso PHP, è necessario verificare se una variabile è impostata prima di utilizzarla.

error_reporting(E_ALL | E_STRICT); 

Quello che state facendo qui

if ($ var)

non sta controllando se il valore è impostato. PHP così rigido genererà un avviso per le variabili non impostate.(questo accade molto con gli array)

Anche in PHP rigoroso (solo una FYI per te o altri), l'uso di un var non impostato come argomento in una funzione genera un avviso e non è possibile controllare isset() all'interno la funzione per evitarlo.

+0

Questo non è completamente corretto. E_STRICT non ha nulla a che fare con un avviso che viene lanciato in questo caso. Anche se E_STRICT è disattivato, viene comunque generata una notifica. – Matt

+0

Intendi nel codice o nel file di registro? Perché è necessario abilitare E_STRICT nel php.ini per farlo gettare (pre PHP 6) –

0

Basta ripetere ciò che altri hanno detto, se si esegue:

if($variable) 

e $ variabile è non insieme, si otterrà un errore di comunicazione. Più ..

$var = 0; 
if($variable) { 
    //This code will never run, because $var is false 
} 

ma utilizzando isset restituirebbe true in questo caso.