布尔值的PHP IF语句:$ var === true vs $ var

时间:2009-11-03 21:07:30

标签: php coding-style paradigms

我知道这个问题并不重要..但我一直想知道:

以下哪种IF语句最好,使用最快?

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

我知道===是完全匹配布尔值。然而,真的有任何改善吗?

5 个答案:

答案 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)

当第一根针位于大海捞针的第0位时,

===在strstr / stristr中非常有帮助。如果你不使用===或!==你的手上可能有一个错误。

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