web-dev-qa-db-fra.com

PHP Instruction IF pour les valeurs booléennes: $ var === true vs $ var

Je sais que cette question n'est pas vraiment importante .. mais je me suis demandé:

Laquelle des instructions IF suivantes est la meilleure et la plus rapide à utiliser?

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

Je sais que === doit correspondre exactement à la valeur booléenne. Mais y a-t-il vraiment une amélioration?

24
MarioRicalde

Utiliser if ($var === true) ou if ($var) n'est pas une question de style mais une question de correction. Parce que if ($var) est identique à if ($var == true). Et == la comparaison ne vérifie pas le type. Donc 1 == true est vrai mais 1 === true c'est faux.

60
Gumbo

En ce qui concerne la vitesse, je suis d'accord avec Niels, c'est probablement négligeable.

Dans la mesure où l'instruction if est préférable de tester, la réponse dépend probablement du casting attendu et des valeurs que peut avoir la variable $.

Si $ variable utilise 0 et 1 comme indicateur vrai/faux, alors si ($ variable) ou si (! $ Variable) fonctionnerait, mais si c'est un résultat entier comme dans strpos (), vous rencontrerez des problèmes ... si possible, je recommanderais d'utiliser une valeur booléenne réelle plutôt que 0/1.

... peut-être que cela aidera à clarifier; commentez les variations de $ var pour voir les différents résultats.

<?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';
}
8
dan_nl

Juste un fait:

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

Le second est plus rapide que le premier.

7
Anton Maryanov

Je ne suis pas vraiment plongé dans le côté technique de PHP, mais dans le premier cas

if($variable === true)

La variable $ doit avoir exactement le même type que true pour que l'instruction if soit vraie. En d'autres termes, $ variable doit non seulement se résoudre à true, mais doit également être un booléen. Voilà donc 2 opérations, la vérification de la valeur et la vérification de type.

Dans le second cas

if($variable)

$ variable n'a qu'à se résoudre à true. Ainsi, seule la vérification de la valeur a lieu. J'en déduis que cela prend un peu moins de temps à l'ordinateur.

Concrètement: les différences de vitesse sont probablement négligeables.

6
Niels Bom

=== est vraiment utile dans strstr/stristr lorsque la première aiguille est en position 0 dans la botte de foin. Si vous n'utilisez pas === ou! == vous pourriez avoir un bug sur les mains.

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