2014-01-30 62 views
0

PHP/5.5.6爲什麼明顯的類型不匹配會提前返回?

可能有人請我爲什麼,如果我分配一個變量爲一個字符串,後來皈依說串爲int解釋,然後比較,情況如下字符串的原始值會返回一個真實的?

的arrayOfValues是數字的int數組像這樣-1,0,0,2,1 ...等

function getScore($arrayOfValues){ 

    $result = 'N/A'; 

    foreach($arrayOfValues as $item){ 
    if($item > 0) { $result = 0; break;} 
    } 

    echo $result; // outputs 0 
    if($result == 'N/A') { return -1; } //code here passes. WHY? 
    echo $result; // outputs never makes it 
    // CODE DOES based upon values calculate score 

    return $result; 
} 

的呼叫到所述類中的函數具有以下

echo $foo->getScore($array); // outputs -1 

如果我將函數中的邏輯更改爲$ result = -1,並且檢查爲$ result < 0;檢查現在按預期通過。爲什麼之前失敗?我知道存在類型不匹配,但是計算機是否也意識到了這一點?

+0

更多討論apropos你的問題:http://stackoverflow.com/questions/2025353/strong-vs-weak-typing和http://stackoverflow.com/questions/3376252/what - 弱勢語言的好處和缺點 –

回答

3

因爲

0 == 'N/A' 

Here你可以閱讀:

如果你比較了一些用細繩或比較涉及 數字字符串,那麼每個字符串轉換爲數字和 進行數值比較

修復它像硫S:

if ($result === 'N/A') ... 

說明(從同一個地方的手冊中):

當比較是該類型的轉換不會發生===或 ==因爲這包括比較!類型以及值

+0

你是說在PHP中雙==是像= =?我也不想要修復,我想要一個解釋。 – mcv

+0

沒有。在此期間,我添加了一些手冊中的文字和鏈接 –

+0

感謝您的參考。我發現這個有趣的原因是我在那裏的邏輯正在工作,現在突然間並沒有。可能是我刪除了一個=而從未注意到它。必須回到svn並仔細檢查。 – mcv

相關問題