2009-11-03 10 views
18

Sé que esta pregunta no es realmente importante .. Sin embargo, me he estado preguntando:

Cuál de las siguientes sentencias IF es la mejor y más rápido de usar?

<?php 

$variable = true; 

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

if($variable) 
{ 
    // Something 
} 


?> 

Sé === es para que coincida exactamente con el valor booleano. Sin embargo, ¿hay realmente alguna mejora?

+0

Lo intenté y no puedo confirmar su reclamo. –

Respuesta

45

El uso de if ($var === true) o if ($var) no es una cuestión de estilo sino una cuestión de corrección. Porque if ($var) es lo mismo que if ($var == true). Y la comparación == no comprueba el tipo. Entonces, 1 == true es verdadero, pero 1 === true es falso.

5

=== es realmente útil en strstr/stristr cuando la primera aguja está en la posición 0 en el pajar. Si no usa === o! == podría tener un error en sus manos.

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

Pequeño comentario en su código: siempre usaré llaves {} alrededor de un bloque de código después de una instrucción if. Sé que no es necesario, pero es bueno para la legibilidad. –

4

no soy muy profundamente en el material técnico de PHP, pero en el primer caso

if($variable === true) 

variable $ tiene que tener el mismo tipo exacto como ocurre con la sentencia if para ser verdad . En otras palabras, $ variable no solo tiene que resolverse en verdadero, sino que también debe ser un booleano. Entonces son 2 operaciones, comprobación de valor y comprobación de tipo.

En el segundo caso

if($variable) 

$ variable sólo tiene que resolver en true. Por lo tanto, solo se realiza una comprobación de valores. Deduzco que eso le toma a la computadora un poco menos de tiempo.

Hablando en términos prácticos: las diferencias en la velocidad son probablemente insignificantes.

7

En cuanto a la velocidad, estoy de acuerdo con Niels, es probable que sea insignificante.

En cuanto a cuál de las afirmaciones es mejor probar, la respuesta probablemente dependa de la conversión esperada y de los valores $ variable que pueda tener.

Si $ variable usa 0 y 1 como indicador verdadero/falso, entonces si ($ variable) o si (! $ Variable) funcionaría, pero si es un resultado entero como en strpos() se encontrará con problemas ... si es posible, recomendaría usar un valor booleano real en lugar de 0/1.

... tal vez esto ayude a aclarar; comente las variaciones de $ var para ver los diversos resultados.

<?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

sólo un hecho:

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) {} }'

el segundo es más rápido que el primero.