【发布时间】:2012-03-04 16:30:01
【问题描述】:
当我遇到以下情况时,我正在处理一些数据解析代码。
$line = "100 something is amazingly cool";
$key = 100;
var_dump($line == $key);
好吧,我们大多数人都希望转储生成false,但令我惊讶的是,转储是true!
我知道在 PHP 中有这样的类型转换:
$x = 5 + "10 is a cool number"; // as documented on PHP manual
var_dump($x); // int(15) as documented.
但是为什么像我在第一个示例中提到的比较将我的字符串转换为整数而不是将整数转换为字符串。
我知道您可以对我的示例进行=== strict-comparison,但我只想知道:
- PHP 文档中是否有任何部分提及此行为?
- 谁能解释为什么会发生在 PHP 中?
- 程序员如何防止此类问题发生?
【问题讨论】:
-
我认为 == 会进行数值比较,并且当您使用字符串并将其转换为以数字开头的数字时,它会使用该数字。如果它可能不会返回类似 NaN 的东西。
-
我们大多数人都期望这个....当将字符串转换为整数时(就像将字符串与数字进行比较时发生的那样),PHP 会在遇到的第一个非数字数字处停止,在在这种情况下,100(所有数字)和“某物”之间的空格。 SO 100 是结果值。
-
@mark 是的,我们大多数人都希望在执行算术运算时进行转换,但在比较中呢?