2009-11-03 3 views
18

VS真の$ VAR ===私はこの質問は本当に重要ではありません知っているが...しかし、私は思ってきた:

最高とされる次のうちどれIF文最速の使用ですか?

<?php 

$variable = true; 

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

if($variable) 
{ 
    // Something 
} 


?> 

私は知っている===これは正確にブール値に一致することです。しかし、実際には改善はありますか?

+0

私は試しましたが、あなたの主張を確認することはできません。 –

答えて

45

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

5

===最初の針が干し草のポジション0にあるときは、strstr/stristrでは本当に役に立ちます。 ===または!==を使用しないと、手にバグが発生する可能性があります。

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

あなたのコードに小さなコメント:if文の後にコードブロックの周りに常に中括弧{}を使用します。私はそれが必要ではないことを知っていますが、それは読みやすさのために良いです。 –

4

私は深いPHPの技術的なものに本当にないんだけど、最初のケースで

if($variable === true) 

$変数は、文が真であることがあれば用として真まったく同じ型を持たなければなりません。言い換えると、$ variableはtrueに解決するだけでなく、ブール値でなければなりません。つまり、2つの操作、バリューチェック、タイプチェックです。第2のケースで

if($variable) 

$変数は唯一の真に解決しなければなりません。したがって、値のチェックのみが行われます。私はそれがコンピュータを少し時間を要すると推測している。

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

7

Niels氏の意見に同感する限り、それはおそらくごくわずかです。

これまでにテストするのが最善の場合、答えはおそらく予想されるキャストと$ variableが持つ値に依存します。

true/falseフラグとして$ variableが使用されている場合、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'; 
} 
7

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

秒1は最初よりも高速です。