PHP转换(整数)返回字符串

PHP转换(整数)返回字符串,php,Php,这是最近开始发生的奇怪事情 function someFunction() { return 0; } if (someFunction() == 0) runCode(); elseif (someFunction() == '0') runOtherCode(); 在这种情况下,将不调用runCode(),而是调用runOtherCode()。为什么会这样 编辑:使用===修复了某些情况下的此错误。然而,出现此问题的另一次是从数据库返回整数结果时。由于某些原因,整数

这是最近开始发生的奇怪事情

function someFunction() {
    return 0;
}
if (someFunction() == 0)
    runCode();
elseif (someFunction() == '0')
    runOtherCode();
在这种情况下,将不调用runCode(),而是调用runOtherCode()。为什么会这样


编辑:使用===修复了某些情况下的此错误。然而,出现此问题的另一次是从数据库返回整数结果时。由于某些原因,整数被转换为字符串,但在返回数据之前向数据添加(int)修复了该错误。

您需要使用严格的比较来防止类型强制。基本上是这样的:

if(someFunction() === 0) 
elseif(someFunction() === '0')
3等号而不是2会调用严格的比较,是区分字符串和整数比较的唯一方法

编辑:
这在其他情况下也是相关的,所以总是要考虑它。

即使是<>代码>某个函数< /C> >的结果被转换为字符串,也没关系。您正在使用不检查类型的
=
进行比较,因此
'0'==0
的计算结果为true(
'0'==0
但不为true)。为了帮助我们,可以在此处发布您的实际代码。当然,除非这是您的实际代码。其他地方有问题,请使用松散比较检查此演示。不过,在OP的问题中,
==0
仍应计算为真。哇!看起来这显然是个问题,因为这个评估根本没有意义,不是吗?我运行了他的代码版本,它运行得很好。如果他没有发布准确的代码,但认为这是一个等效的示例,那么这可能仍然与严格的比较有关。是的,我最初的想法也是;)这就是为什么我要求OP提供他的实际代码,因为我觉得可能还有更多。这解决了我一半的问题。另一半是我数据库中的整数,出于某种原因,它们被转换成字符串。现在我只需要在返回之前将它们转换回来。您的数据库列设置为int还是var?如果列始终接受整数,则应尽可能始终将其设置为int列,因为它的处理速度更快(我说的是sql,但假设几乎所有数据库都是这样)。