为什么"10"=="0xa"评估为true,但"10"=="012"不是?

Mar*_*sch 0 php

这些天我发现了这个奇怪的代码片段"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)

手册中记录了这种行为在哪里?

编辑:请在示例代码的上下文中理解该问题.这应该强调二进制和八进制表示与其余表示之间的不一致.

Mar*_*ker 5

PHP Docs参考

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串将转换为数字,并且数字执行比较.

(我的重点)

编辑

数字sting是trueis_numeric()函数返回布尔值的数字

查找给定变量是否为数字.数字字符串由可选符号,任意数量的数字,可选的小数部分和可选的指数部分组成.因此+ 0123.45e6是有效的数值.也允许十六进制(例如0xf4c3b00c),二进制(例如0b10100111001),八进制(例如0777)表示法,但仅包含无符号,十进制和指数部分.