这些天我发现了这个奇怪的代码片段"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
);
Run Code Online (Sandbox Code Playgroud)
手册中记录了这种行为在哪里?
编辑:请在示例代码的上下文中理解该问题.这应该强调二进制和八进制表示与其余表示之间的不一致.
如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串将转换为数字,并且数字执行比较.
(我的重点)
编辑
数字sting是true从is_numeric()函数返回布尔值的数字
查找给定变量是否为数字.数字字符串由可选符号,任意数量的数字,可选的小数部分和可选的指数部分组成.因此+ 0123.45e6是有效的数值.也允许十六进制(例如0xf4c3b00c),二进制(例如0b10100111001),八进制(例如0777)表示法,但仅包含无符号,十进制和指数部分.
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |