我知道这个问题并不重要..但我一直想知道:
以下哪种IF语句最好,使用最快?
<?php
$variable = true;
if($variable === true)
{
//Something
}
if($variable)
{
// Something
}
?>
我知道===是完全匹配布尔值。然而,真的有任何改善吗?
答案 0 :(得分:59)
使用if ($var === true)
或if ($var)
不是风格问题,而是正确性问题。因为if ($var)
与if ($var == true)
相同。并且==
比较不检查类型。因此1 == true
为真,但1 === true
为假。
答案 1 :(得分:8)
就速度而言,我同意尼尔斯的观点,这可能是微不足道的。
至于哪个if语句最好用于测试,答案可能取决于预期的转换和$ variable可以具有的值。
如果$ variable使用0和1作为真/假标志,则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';
}
答案 2 :(得分: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) {} }'
第二个比第一个快。
答案 3 :(得分:6)
我并不是非常深入了解PHP的技术内容,但在第一种情况下
if($variable === true)
对于if语句,$ variable必须与true具有完全相同的类型才能为真。换句话说,$ variable不仅要解析为true,还必须是布尔值。这就是2个操作,值检查和类型检查。
在第二种情况下
if($variable)
$ variable只需解析为true。所以只进行价值检查。我推断,计算机的使用时间会少一些。
实际上说:速度的差异可能微乎其微。
答案 4 :(得分:5)
===在strstr / stristr中非常有帮助。如果你不使用===或!==你的手上可能有一个错误。
$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;