Question

Je sais que cette question est vraiment important .. mais je me demandais:

Lequel des énoncés suivants: Si est le meilleur et le plus rapide à utiliser?

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

Je sais === est de faire correspondre exactement la valeur booléenne. est-il vraiment cependant une amélioration?

Était-ce utile?

La solution

Utilisation if ($var === true) ou if ($var) n'est pas une question de style, mais une question de décision correcte. Parce que if ($var) est le même que if ($var == true). Et la comparaison de == ne vérifie pas le type. Alors 1 == true est vrai, mais 1 === true est faux.

Autres conseils

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

En ce qui concerne ce qui si la déclaration est préférable de tester avec, la réponse dépend probablement de la coulée attendue et les valeurs des variables de $ peut avoir.

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

... peut-être cela aidera à clarifier; commenter 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';
}

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

La seconde est plus rapide que la première.

Je ne suis pas vraiment profondément dans les aspects techniques de PHP, mais dans le premier cas

if($variable === true)

$ variable doit avoir exactement le même type que vrai pour l'instruction if est vrai. En d'autres termes, la variable $ a non seulement pour résoudre à vrai, mais doit aussi être une valeur booléenne. Donc, c'est 2 opérations, la valeur de contrôle et vérification de type.

Dans le second cas

if($variable)

variable $ a seulement pour résoudre true. Alors que la vérification de la valeur se produit. Je déduis que cela prend l'ordinateur un peu moins de temps.

En pratique: les différences de vitesse sont probablement négligeables

.

=== 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 vos mains.

$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top