2014-09-26 124 views
0

这是最近开始发生的奇怪事情。PHP转换(整数)返回字符串

function someFunction() { 
    return 0; 
} 
if (someFunction() == 0) 
    runCode(); 
elseif (someFunction() == '0') 
    runOtherCode(); 

在这种情况下runCode()不会被调用,而是runOtherCode()将被调用。为什么会发生这种情况?

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

+0

即使“someFunction”的结果被转换为字符串,这也没有关系。您正在使用不检查类型的'=='进行比较,因此'0'== 0'的计算结果为true(''0'=== 0'但是不是)。 – fstanis 2014-09-27 00:04:03

+0

为了让我们更有帮助,可以在这里发布你的实际代码。当然,除非这是你的实际代码。 – Bono 2014-09-27 00:04:15

+1

别的地方有点不对劲,查看这个demo http://3v4l.org/tsDPj – 2014-09-27 00:12:31

回答

1

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

if(someFunction() === 0) 
elseif(someFunction() === '0') 

3等号,而不是两个调用一个严格比较,是字符串和整数比较来区分的唯一途径。

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

+1

在OP的问题中,使用宽松比较'== 0'仍然应该评估为true。 – Bono 2014-09-27 00:04:48

+0

啊。哇。看起来这显然是问题所在,因为这样的评估真的没有意义吗?我运行了他的代码版本,它工作得很好。如果他没有发布确切的代码,它仍然可能与严格的比较有关,但认为这是一个等效的例子。 – 2014-09-27 00:06:54

+0

也是我最初的想法;)这就是为什么我要求OP提供他的实际代码,因为我觉得可能还有更多。 – Bono 2014-09-27 00:11:13