簡體   English   中英

PHP-'!== false'和'== true'有什么區別?

[英]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僅是truefalse ,但對於其他值它們的行為有所不同,則它們是相同的,這是正確的。

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM