这些天我发现了这个奇怪的代码片段"10" == "0xa"
,其评估结果为true。我在文档中找到的最好的是关于Type Juggling:
变量的类型由使用变量的上下文决定
但我没有在该代码片段中看到任何整数上下文。虽然询问周围的人似乎接受这个功能。我听到的一个解释是PHP会将它们作为数字进行比较。所以我对一些有效的10个表达式(使用PHP-5.6.5)做了一些数字比较:
<?php
var_dump(
0b1010, "10" == "0b1010", // false
012, "10" == "012", // false
0xa, "10" == "0xa", // true
1E+1, "10" == "1E+1", // true
1e1, "10" == "1e1", // true
10.0, "10" == "10.0", // true
+10, "10" == "+10" // true
);
手册中记录了这种行为在哪里?
修改:请在示例代码的上下文中理解该问题。这应该强调二进制和八进制表示与其余表示之间的不一致。
答案 0 :(得分:5)
如果您将数字与字符串进行比较或比较涉及数字字符串,则会将每个字符串转换为数字,并以数字方式执行比较。
(我的重点)
修改强>
数字刺痛是从is_numeric()函数
返回布尔true
的数字刺痛
查找给定变量是否为数字。数字字符串由可选符号,任意数量的数字,可选的小数部分和可选的指数部分组成。因此+ 0123.45e6是有效的数值。也允许十六进制(例如0xf4c3b00c),二进制(例如0b10100111001),八进制(例如0777)表示法,但仅允许没有符号,十进制和指数部分。