declaração PHP IF para valores booleanos: $ var === verdadeira vs $ var
-
13-09-2019 - |
Pergunta
Eu sei que esta questão não é realmente importante .. porém eu estive pensando:
Qual das seguintes instruções IF é a melhor e mais rápida de usar?
<?php
$variable = true;
if($variable === true)
{
//Something
}
if($variable)
{
// Something
}
?>
Eu sei === é para corresponder exatamente o valor booleano. No entanto há realmente alguma melhoria?
Solução
Usando if ($var === true)
ou if ($var)
não é uma questão de estilo, mas uma questão de correção. Porque if ($var)
é o mesmo que if ($var == true)
. E comparação ==
não verifica o tipo. Então 1 == true
é verdade, mas 1 === true
é falsa.
Outras dicas
No que diz respeito a velocidade, eu concordo com Niels, é provavelmente insignificante.
Quanto qual if é melhor para teste com, a resposta provavelmente depende da fundição esperado e valoriza $ variável pode ter.
Se $ variável é usando 0 e 1 como um verdadeiro falso da bandeira / then if ($ variável) ou if (! $ Variável) iria funcionar, mas se é um resultado inteiro como em strpos () você vai correr em problemas ... se possível, eu recomendo usar um valor booleano real em vez de 0/1.
... talvez isso irá ajudar a esclarecer; comentar as variações de $ var para ver os vários 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';
}
Apenas um fato:
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) {} }'
O segundo é mais rápido do que o primeiro.
Eu não estou realmente em profundidade o material técnico de PHP, mas no primeiro caso
if($variable === true)
$ variável tem de ter o mesmo tipo exato tão verdadeiro para a instrução if para ser verdade. Em outras palavras, $ variável tem não só para resolver a verdade, mas também tem que ser um booleano. Então, isso é 2 operações, valor verificação e verificação de tipo.
No segundo caso
if($variable)
$ variável só tem a determinação de verdade. Assim, apenas o valor de verificação ocorre. Deduzo que que leva o computador um pouco de tempo a menos.
Em termos práticos:. As diferenças de velocidade são provavelmente insignificante
=== é realmente útil em strstr / stristr quando a primeira agulha está na posição 0 no palheiro. Se você não usar === ou! == você poderia ter um bug em suas mãos.
$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;