我知道這個問題是不是真的很重要。但是我一直在想:
以下哪項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