【发布时间】:2014-03-14 06:05:27
【问题描述】:
只是好奇这种情况下 PHP 类型转换是如何工作的。
var_dump(1 == '1,2') // boolean(true)
【问题讨论】:
-
(与var_dump无关,只是你观察结果的方式。)
只是好奇这种情况下 PHP 类型转换是如何工作的。
var_dump(1 == '1,2') // boolean(true)
【问题讨论】:
那是因为这里 1 是一个整数,当它与一个字符串 1,2 比较时,这个字符串将被转换为一个整数,它返回 1.
1,2如何返回1?echo int('1,2'); // prints 1
因此,当它与您的 1 进行比较时,这显然会在您的 var_dump 上返回 true
如果您将数字与字符串进行比较,或者比较涉及 数字字符串,然后将每个字符串转换为数字,然后 以数字方式进行比较。
【讨论】:
解释为:
var_dump(1 === (int) '1,2');
"1,2" 转换为 int 将返回 1,因为在最后一个解析数字之后的任何内容都将被截断(在这种情况下为 ,2)。
记住逗号(,)不是小数点分隔符,点(.)是:
var_dump((float) '1,3', (float) '1.3');
结果:
(float) 1
(float) 1.3
转换通常非常不直观,这就是为什么您应该几乎总是使用=== 运算符,它不会创建转换。
【讨论】:
如果您使用==,php 会将右侧值类型转换为左侧值。
在这种情况下,'1,2' 将被类型转换为 1 并返回 true。
即使var_dump( 1== "1dfuiekjdfdsfdsfdsfdsfsdfasfsadf" ); 也会返回 true。
【讨论】: