2011-06-16 101 views
2

我有這個代碼的原理問題,我無法解釋。學說來自陣營的錯誤?

public function fromArray(array $array, $deep = true) { 
    $refresh = false; 
    foreach ($array as $key => $value) { 

     if ($key == '_identifier') { 
      $refresh = true; 
      $this->assignIdentifier($value); 
      continue; 
     } 

我的鍵(整數)0將等於(字符串)'_identifier'。這是PHP中的錯誤還是這是正常的?或者我做錯了什麼?

當我將代碼更改爲$key === '_identifier'時,它有效。我有PHP版本5.3.4

回答

5

這是PHP:

echo (int) '_identifier'; // 0 

0等於0。在比較操作字符串變爲整數進行比較。

使用===也可以對同一類型進行比較。所謂的相同,不等於:

public function fromArray(array $array, $deep = true) { 
    $refresh = false; 
    foreach ($array as $key => $value) { 
     if ($key === '_identifier') { 
     $refresh = true; 
     $this->assignIdentifier($value); 
     continue; 
     } 
2

據我瞭解:

==只是一般的比較,因此,如果您的鍵是整數,將字符串轉換爲整數來比較它和from the manual

該值由字符串的起始 部分給出。如果字符串 以有效數字數據開頭,則此 將是使用的值。否則, 值將爲0(零)。有效數字 數據是一個可選符號,然後是 一個或多個數字(可選包含小數點的 ),後面跟隨 可選指數。指數 是一個'e'或'E',後面跟一個或多個數字。

===是嚴格評估,所以它也比較類型。

所以當你做「0 == '_identifier'」它原封不動地評價'_identifier'爲0 當你做「0 === '_identifier'」沒有通過,因爲它們是不同的類型。