2009-11-03 11 views
18

So che questa domanda non è veramente importante .. però mi sono chiesto:

Quale delle seguenti istruzioni IF è il migliore e più veloce da usare?

<?php 

$variable = true; 

if($variable === true) 
{ 
    //Something 
} 

if($variable) 
{ 
    // Something 
} 


?> 

Lo so === corrisponde esattamente al valore booleano. Tuttavia c'è davvero qualche miglioramento?

+0

Ho provato e non posso confermare il reclamo. –

risposta

45

Utilizzare if ($var === true) o if ($var) non è una questione di stile ma una questione di correttezza. Perché if ($var) corrisponde a if ($var == true). E il confronto == non controlla il tipo. Quindi 1 == true è vero ma 1 === true è falso.

5

=== è molto utile in strstr/stristr quando il primo ago si trova in posizione 0 nel pagliaio. Se non usi === o! == potresti avere un bug nelle tue mani.

$str = "four score and..."; 
$position = strstr($str,'four'); 
if($position===FALSE) return FALSE; 
+2

Piccolo commento sul tuo codice: utilizzerei sempre le parentesi graffe {} attorno a un codice dopo un'istruzione if. So che non è necessario, ma secondo me è buono per la leggibilità. –

4

io non sono davvero in profondità nel materiale tecnico di PHP, ma nel primo caso

if($variable === true) 

$ variabile deve avere lo stesso tipo come vera per l'istruzione if per essere vero . In altre parole, $ variabile non ha solo la risoluzione a true, ma deve anche essere un booleano. Quindi sono 2 operazioni, controllo dei valori e controllo dei tipi.

Nel secondo caso

if($variable) 

variabile $ ha solo per risolvere true. Quindi si verifica solo il controllo del valore. Ne deduco che ciò richiede al computer un po 'meno di tempo.

In pratica: le differenze di velocità sono probabilmente trascurabili.

7

Per quanto riguarda la velocità, sono d'accordo con Niels, probabilmente è trascurabile.

Per quanto riguarda l'istruzione se è meglio testare, la risposta dipende probabilmente dal cast previsto e dai valori che può avere la variabile $.

Se $ variabile usa 0 e 1 come una bandiera vero/falso, allora se ($ variabile) o se (! $ Variabile) funzionerebbe, ma se è un risultato intero come in strpos() ti imbatterai in problemi ... se possibile, ti consigliamo di utilizzare un valore booleano effettivo anziché 0/1.

... forse questo aiuterà a chiarire; commenta le variazioni di $ var per vedere i vari risultati.

<?php 

$var = true; 
$var = 1; 

$var = false; 
$var = 0; 

if ($var) { 
    echo 'var = true <br />'; 
} 

if ($var === true) { 
    echo 'var is a boolean and = true'; 
} 

if (!$var) { 
    echo 'var = false <br />'; 
} 

if ($var === false) { 
    echo 'var is a boolean and = false'; 
} 
7

solo un fatto:

time php -r '$r = true; for($i = 0; $i < 10000000; $i++) { if($r == true) {} }'

time php -r '$r = true; for($i = 0; $i < 10000000; $i++) { if($r) {} }'

Il secondo è più veloce rispetto alla prima.