我想知道为什么这样做会起作用:
var_dump(5 == "5 AND SOME TEXT");
Run Code Online (Sandbox Code Playgroud)
输出:
bool(true)
Run Code Online (Sandbox Code Playgroud)
比较如下的浮点数时,也会获得相同的输出:
var_dump(1.234 == "1.234 AND SOME TEXT");
Run Code Online (Sandbox Code Playgroud)
这必须是故意的,因为这是很基本的事情,并且可以在多个PHP版本中使用。我只是不明白这是怎么打算的。
当你使用等号(==),PHP执行型杂耍如果这两个值是相同类型的不行。将数字与字符串进行比较时,它将尝试将该字符串转换为数字。
在将字符串转换为数字时,如果字符串以有效的数字开头,则将使用。一旦遇到非数字值,PHP就会停止处理字符串的其余部分(如果字符串不是以数字开头,PHP会将其转换为0)。因此,您的字符串"5 AND SOME TEXT"以有效的数值(5)开头,但是一旦PHP找到该空间,它就会停止并且最终以该数值开始5。既然5 == 5,您的结果是true。您的其他字符串也是如此,"1.234 AND SOME TEXT"是直到第一个空格的有效数字。
有两种方法可以解决此问题:
===)。这将确保不会进行任何类型的变戏法,因此5 === "5 AND SOME TEXT"will 的结果false。不利的一面是,由于您要将数字类型与字符串进行比较,因此结果5 === "5"也将是false因为两个值属于不同类型。这可能不是您想要的。"5" == "5 AND SOME TEXT"(或(string)5 == "5 AND SOME TEXT"),两者都是false。但是,如果右边的值实际上在数值上是正确的,那么您将获得所需的结果:("5" == "5"或(string)5 == "5")将返回true。| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |