为什么" 1"等于" + 1"?

时间:2017-02-28 16:32:18

标签: php

在PHP中,字符串" 1"等于字符串" + 1"除非你做一个严格的比较(===)。

echo ("1" == "+1") ? "equals" : "not equals";  // result: "equals"

我不想进行严格的比较,因为字符串" 1"在这种情况下,可能会以整数1的形式提供。我不能intval()来区分它们,因为它们都返回1,我不能is_numeric()来区分它们,因为它们都返回true。

所以,请问两个问题:

  1. 除了通过strval()将输入转换为字符串并使用严格比较之外,还有什么方法可以区分这些吗?

  2. 这是PHP中的错误或预期行为吗?原因似乎不是数学的(" 2"不等于" 1 + 1"例如,虽然" 2"确实等于" + 2&#34)。我对这背后的推理感到好奇。

1 个答案:

答案 0 :(得分:3)

使用==代替===时,会使用松散比较。

在比较无与伦比的类型时,这通常会导致使用truthyness的类型

在这里查看手册以查看比较表 http://php.net/manual/en/types.comparisons.php

即使未提及"+1",也会以'-1'

的方式处理

如果您不希望发生这种情况,则需要使用===