Php 为什么明显的类型不匹配很早就出现了?

Php 为什么明显的类型不匹配很早就出现了?,php,Php,PHP/5.5.6 有人能给我解释一下,为什么我把一个变量赋值为字符串,然后把这个字符串转换成int,然后把它和字符串的原始值进行比较,那么下面的情况会返回一个true arrayOfValues是一个整数数组,如so-1,0,0,2,1。。。等 function getScore($arrayOfValues){ $result = 'N/A'; foreach($arrayOfValues as $item){ if($item > 0) { $result = 0

PHP/5.5.6

有人能给我解释一下,为什么我把一个变量赋值为字符串,然后把这个字符串转换成int,然后把它和字符串的原始值进行比较,那么下面的情况会返回一个true

arrayOfValues是一个整数数组,如so-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 == 'N/A'
你可以阅读:

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

像这样修复它:

if ($result === 'N/A') ...
说明(在手册的同一位置):

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

因为

0 == 'N/A'
你可以阅读:

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

像这样修复它:

if ($result === 'N/A') ...
说明(在手册的同一位置):

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

因为

0 == 'N/A'
你可以阅读:

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

像这样修复它:

if ($result === 'N/A') ...
说明(在手册的同一位置):

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

因为

0 == 'N/A'
你可以阅读:

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

像这样修复它:

if ($result === 'N/A') ...
说明(在手册的同一位置):

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


你是说在PHP中,double==就像一个=?而且我也不想要修正,我想要一个解释。不。同时,我还添加了手册中的一些单词和链接,谢谢您的参考。我发现这很有趣,因为我在那里的逻辑是有效的,而现在它突然不起作用了。我可能被删除了一个=并且从未注意到它。必须返回到svn并仔细检查。还有一个问题,如果我要将字符串N/A转换为int,那么0=='N/A'是多少?或者我是否声明0等同于N/A?我注意到文档中的第一个示例,其中var_dump(0==“a”);//0==0->true.yes,如果您将
的“N/A”
转换为一个数字,您将得到
0
。如果将
“3.14ABC”
转换为一个数字,则得到
3.14
,依此类推。当比较的任一操作数是数字,或者两个操作数都是数字字符串(这意味着
“2.0”==“2”
)时,就会发生到数字的转换。您是说在PHP中,double==类似于一个=?而且我也不想要修正,我想要一个解释。不。同时,我还添加了手册中的一些单词和链接,谢谢您的参考。我发现这很有趣,因为我在那里的逻辑是有效的,而现在它突然不起作用了。我可能被删除了一个=并且从未注意到它。必须返回到svn并仔细检查。还有一个问题,如果我要将字符串N/A转换为int,那么0=='N/A'是多少?或者我是否声明0等同于N/A?我注意到文档中的第一个示例,其中var_dump(0==“a”);//0==0->true.yes,如果您将
的“N/A”
转换为一个数字,您将得到
0
。如果将
“3.14ABC”
转换为一个数字,则得到
3.14
,依此类推。当比较的任一操作数是数字,或者两个操作数都是数字字符串(这意味着
“2.0”==“2”
)时,就会发生到数字的转换。您是说在PHP中,double==类似于一个=?而且我也不想要修正,我想要一个解释。不。同时,我还添加了手册中的一些单词和链接,谢谢您的参考。我发现这很有趣,因为我在那里的逻辑是有效的,而现在它突然不起作用了。我可能被删除了一个=并且从未注意到它。必须返回到svn并仔细检查。还有一个问题,如果我要将字符串N/A转换为int,那么0=='N/A'是多少?或者我是否声明0等同于N/A?我注意到文档中的第一个示例,其中var_dump(0==“a”);//0==0->true.yes,如果您将
的“N/A”
转换为一个数字,您将得到
0
。如果将
“3.14ABC”
转换为一个数字,则得到
3.14
,依此类推。当比较的任一操作数是数字,或者两个操作数都是数字字符串(这意味着
“2.0”==“2”
)时,就会发生到数字的转换。您是说在PHP中,double==类似于一个=?而且我也不想要修正,我想要一个解释。不。同时,我还添加了手册中的一些单词和链接,谢谢您的参考。我发现这很有趣,因为我在那里的逻辑是有效的,而现在它突然不起作用了。我可能被删除了一个=并且从未注意到它。必须返回到svn并仔细检查。还有一个问题,如果我要将字符串N/A转换为int,那么0=='N/A'是多少?或者我是否声明0等同于N/A?我注意到文档中的第一个示例,其中var_dump(0==“a”);//0==0->true.yes,如果您将
的“N/A”
转换为一个数字,您将得到
0
。如果您转换
“3.14AB