我知道这个问题是不是真的很重要。但是我一直在想:
以下哪项IF语句是最好的,最快使用?
<?php
$variable = true;
if($variable === true)
{
//Something
}
if($variable)
{
// Something
}
?>
我知道===是完全匹配布尔值。然而,真的有改善吗?
我知道这个问题是不是真的很重要。但是我一直在想:
以下哪项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
是错误的。
===在strstr/stristr中真正有用,当第一根针在干草堆中的位置0时。如果你不使用===或!==,你可能会在你的手上有一个错误。
$str = "four score and...";
$position = strstr($str,'four');
if($position===FALSE) return FALSE;
对你的代码的小小评论:在if语句之后,我总是在代码块周围使用大括号{}。我知道这不是必要的,但是imho对于可读性很好。 – 2009-11-03 21:39:05
我真的不深入到PHP的技术的东西,但在第一种情况下
if($variable === true)
$变量必须具有类型完全相同的为真if语句是真实的。换句话说,$变量不仅要解析为真,还必须是布尔值。这是2个操作,值检查和类型检查。
在第二种情况下
if($variable)
$变量只需要解决为true。所以只有值检查发生。我推断那需要更少的时间。
实际上,速度差异可能可以忽略不计。
只要速度,我同意尼尔斯,它可能可以忽略不计。
至于哪个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';
}
只是一个事实:
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) {} }'
第二个比第一个快。
我试过了,我无法确认你的说法。 – 2011-12-27 13:21:43