ブール値のためのPHP IF文:$のVAR === $のVAR対真
-
13-09-2019 - |
質問
私は、しかし、私は思ってきた...この質問は本当に重要ではありません知ってます:
次のうちどれIF文が使用するのが最善かつ最速のですか?
<?php
$variable = true;
if($variable === true)
{
//Something
}
if($variable)
{
// Something
}
?>
私は===厳密にブール値を一致させることです知っています。しかし、いずれの改善が本当にあるのでしょうか?
解決
if ($var === true)
またはif ($var)
を使用すると、スタイルの問題が、正しさの問題ではありません。 if ($var)
はif ($var == true)
と同じなので。そして==
比較タイプをチェックしません。だから、1 == true
は本当ですが、1 === true
はfalseです。
他のヒント
スピードとして、私はニールスに同意する限り、それはおそらく無視できるのです。
限りif文でテストするのが最善であると、答えはおそらく予想される鋳造に依存し、値$変数を持つことができます。
$変数があれば($変数)または(!$変数)ならば、真/偽フラグとして0と1を使用している動作しますが、それは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';
}
ただ、実際ます:
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) {} }'
二つ目は、最初よりも高速である。
私は、PHPの技術的なものに本当に深くないんだけど、最初のケースでは、
if($variable === true)
$変数は、文が真であることがあれば用として真まったく同じタイプを持っている必要があります。言い換えれば、$変数がtrueに解決していないだけであり、またブールなければなりません。だから2つの操作、値チェックと型チェックです。
第2のケースで
if($variable)
$変数は唯一の真に解決しなければなりません。だから、唯一の値のチェックが行われます。私は、コンピュータに少し時間がかかること推測ます。
事実上:スピードの違いはおそらくごくわずかです。
。===最初の針は、干し草の山の位置0にあるときはstrstr / stristrで本当に便利です。あなたが使用していない場合===あるいは!==あなたがあなたの手の上にバグを持っている可能性があります。
$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;