web-dev-qa-db-ja.com

PHPブール値のIFステートメント:$ var === true vs $ var

私はこの質問が本当に重要ではないことを知っています..しかし、私は疑問に思っていました:

次のIFステートメントのうち、使用するのに最適で最速のステートメントはどれですか?

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

===はブール値と正確に一致することを知っています。しかし、本当に改善はありますか?

24
MarioRicalde

if ($var === true)またはif ($var)を使用することは、スタイルの問題ではなく、正確さの問題です。 if ($var)if ($var == true)と同じだからです。そして==比較では、タイプはチェックされません。そう 1 == trueは真ですが、1 === trueはfalseです。

60
Gumbo

速度に関しては、私はNielsに同意しますが、おそらく無視できます。

どのifステートメントをテストするのが最善であるかについては、おそらく、予想されるキャストと$ variableの値に依存します。

$ variableが0および1をtrue/falseフラグとして使用している場合、if($ variable)またはif(!可能であれば、0/1ではなく、実際のブール値を使用することをお勧めします。

...おそらくこれは明確にするのに役立つでしょう。 $ varのバリエーションをコメントアウトして、さまざまな結果を確認します。

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

ただ事実:

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

2番目のものは最初のものよりも高速です。

7
Anton Maryanov

私はPHPの技術的なことにはあまり詳しくありませんが、最初のケースでは

if($variable === true)

ifステートメントがtrueになるためには、$ variableのタイプがtrueとまったく同じでなければなりません。つまり、$ variableはtrueに解決するだけでなく、ブール値でもある必要があります。つまり、値チェックと型チェックの2つの操作です。

2番目の場合

if($variable)

$ variableはtrueに解決するだけです。したがって、値のチェックのみが発生します。私はそれがコンピュータに少し少ない時間がかかると推測します。

実際には、速度の違いはおそらく無視できる程度です。

6
Niels Bom

===は、最初の針が干し草の山の位置0にあるときにstrstr/stristrで本当に役立ちます。 ===または!==を使用しない場合、手にバグがある可能性があります。

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