为什么明显的类型不匹配早期回归?

时间:2014-01-30 14:02:13

标签: php

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;支票现在按预期通过。为什么以前失败了?我知道存在类型不匹配但计算机是否应该意识到这一点?

1 个答案:

答案 0 :(得分:3)

,因为

0 == 'N/A'

Here你可以阅读:

  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较数字化进行

修复如下:

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

解释(来自手册中的同一地方):

  

当比较为===或时,不会发生类型转换   !==因为这涉及比较类型和值