32

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

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

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

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

4

5 に答える 5

72

if ($var === true)orの使用if ($var)はスタイルの問題ではなく、正確さの問題です。if ($var)と同じだからですif ($var == true)。また、==比較は型をチェックしません。それ1 == trueは本当ですが、1 === true間違っています。

于 2009-11-03T21:09:58.277 に答える
11

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

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

$variable が 0 と 1 を true/false フラグとして使用している場合、 if ( $variable ) または if ( !$variable ) は機能しますが、 strpos() のように整数の結果である場合は問題が発生します...可能であれば、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';
}
于 2009-11-03T21:45:44.360 に答える
8

ただの事実:

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番目のものは最初のものよりも高速です。

于 2010-02-01T18:48:11.377 に答える
6

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

if($variable === true)

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

2番目のケースでは

if($variable)

$variable は true に解決する必要があるだけです。したがって、値のチェックのみが行われます。これにより、コンピューターの時間が少し短縮されると思います。

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

于 2009-11-03T21:14:12.887 に答える
5

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

$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;
于 2009-11-03T21:12:52.013 に答える