2009-11-03 124 views
18

我知道这个问题是不是真的很重要。但是我一直在想:

以下哪项IF语句是最好的,最快使用?

<?php 

$variable = true; 

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

if($variable) 
{ 
    // Something 
} 


?> 

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

+0

我试过了,我无法确认你的说法。 – 2011-12-27 13:21:43

回答

45

使用if ($var === true)if ($var)不是风格问题,而是正确性问题。因为if ($var)if ($var == true)相同。和==比较不检查类型。所以1 == true是正确的,但1 === true是错误的。

5

===在strstr/stristr中真正有用,当第一根针在干草堆中的位置0时。如果你不使用===或!==,你可能会在你的手上有一个错误。

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

对你的代码的小小评论:在if语句之后,我总是在代码块周围使用大括号{}。我知道这不是必要的,但是imho对于可读性很好。 – 2009-11-03 21:39:05

4

我真的不深入到PHP的技术的东西,但在第一种情况下

if($variable === true) 

$变量必须具有类型完全相同的为真if语句是真实的。换句话说,$变量不仅要解析为真,还必须是布尔值。这是2个操作,值检查和类型检查。

在第二种情况下

if($variable) 

$变量只需要解决为true。所以只有值检查发生。我推断那需要更少的时间。

实际上,速度差异可能可以忽略不计。

7

只要速度,我同意尼尔斯,它可能可以忽略不计。

至于哪个if语句最好用来测试,答案可能取决于预期的转换和值变量可以具有的值。

如果$ 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'; 
} 
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) {} }'

第二个比第一个快。