很好奇PHP类型转换如何适用于这种情况。
var_dump(1 == '1,2') // boolean(true)
答案 0 :(得分:7)
这是因为 1 在这里是一个整数,当它与字符串 1,2
进行比较时,此字符串将被转换为一个整数,该整数返回的 1 强>
1,2
转换为1?echo int('1,2'); // prints 1
因此,当与 1 进行比较时,显然会在true
var_dump
如果您将数字与字符串进行比较或比较涉及 数字字符串,然后每个字符串转换为一个数字和 比较用数字表示。
答案 1 :(得分:4)
它被解释为:
var_dump(1 === (int) '1,2');
"1,2"
投放到int
将返回1
,因为最后解析的数字之后的任何内容都会被切断(在这种情况下为,2
)。
请记住,逗号(,
)不是小数点分隔符,点(.
)是:
var_dump((float) '1,3', (float) '1.3');
结果:
(float) 1
(float) 1.3
投射通常非常不直观,这就是为什么你应该几乎总是使用===
运算符,它不会创建强制转换。
答案 2 :(得分:4)
如果使用==
,php会将右侧值输入到左侧值。
在这种情况下,'1,2'
将被输入到1
并返回true。
即使var_dump( 1== "1dfuiekjdfdsfdsfdsfdsfsdfasfsadf" );
也会返回true。