32

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

以下哪个 IF 语句使用起来最好且最快?

<?php

$variable = true;

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

if($variable)
{
    // Something
}


?>

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

4

5 回答 5

72

使用if ($var === true)orif ($var)不是风格问题,而是正确性问题。因为if ($var)是一样的if ($var == true)。并且==比较不检查类型。所以1 == true是真的,但1 === true也是假的。

于 2009-11-03T21:09:58.277 回答
11

至于速度,我同意 Niels 的观点,它可能可以忽略不计。

至于哪个 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';
}
于 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) {} }'

第二个比第一个快。

于 2010-02-01T18:48:11.377 回答
6

我对 PHP 的技术并不是很深入,但在第一种情况下

if($variable === true)

$variable 必须具有与 true 完全相同的类型才能使 if 语句为 true。换句话说,$variable 不仅必须解析为 true,还必须是布尔值。所以这是 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 回答