![](/img/trans.png)
[英]What is the difference between an if (true)/else (false) and a if(!true) in php?
[英]PHP - What is the difference between '!== false' and ' == true'?
有時我看到人們寫這樣的條件語句:
if($var !== false) {...}
而不是像這樣:
if($var == true) {...}
這些都一樣吧?
我看到前者的使用頻率更高,並且想知道這背后是否有原因,或者僅僅是個人喜好。
我很欣賞這可能是基於意見的,但是我很好奇這背后是否有合理的理由。
這個:
if($var !== false) {...}
僅在$ var完全為false時,結果才為false
。 如果$ var是任何其他值(無論是否為“ false-y”),它將不會計算為false。
這個:
if($var == true) {...}
對於任何“ false-y”值,其評估結果均為false。 例如0
, '0'
。
除此以外:
if($var === true) {...}
僅當$ var完全設置為true時,才會計算為true,而不是其他“ truthy-y”值。
因此,如果您知道$ var僅是true
或false
,但對於其他值它們的行為有所不同,則它們是相同的,這是正確的。
$var !== false
可以用於可讀性或個人喜好以外的其他用途。 期望各種PHP函數在出錯的情況下返回false
, 並且在成功時也可能返回錯誤的值 。 以strpos
為例:
返回相對於干草堆字符串起點的針所在位置(與偏移量無關)。 另請注意,字符串位置從0開始,而不是1。
如果找不到針,則返回FALSE。
這意味着該函數可以返回一個整數, 如果在開始處找到了needle ,則返回0
如果沒有找到needle,則返回false
。 您必須使用!== false
來檢查表達式是否為false
,而不是虛假的。
他們不一樣。
!==
是對值和類型進行比較的嚴格比較。 $var
必須等於(bool) false
。 這意味着,如果返回字符串“ false”,它將失敗。
==
是一個寬松的比較,僅檢查值。 這意味着$var
可以等於'(string)string'並且為true。 在檢查這樣的變量時:
if ($var == true) {
}
您檢查$var
是否包含任何內容/已定義。 只要某項是反對的(並且不等於(bool) false
),它將通過條件。 這意味着'(string)false'將通過該條件。
某些函數(例如strpos
)返回(bool) false
strpos
因此對於這些類型的函數而言,執行第一個(IMO)更好。
當您使用==
首先,它對變量進行類型轉換並比較這些值是否相同。 您可以在以下示例中看到
var_dump(0==FALSE); // ( 0 == ( int ) false ) bool(true)
var_dump(0=='anystring'); // ( 0 == ( int ) 'anystring' ) bool(true)
當您使用===
它也比較值和類型
所以這就像
var_dump( gettype( 0 ) == gettype( false ) && 0 == false )
如果類型檢查失敗,這將更快,因為如果類型檢查失敗,則不必為進一步的“值檢查”鍵入值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.