2014-01-30 65 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

相关问题