PHPの数字文字列の比較は16進数でも有効

PHPの数字だけで構成された文字列の比較が暗黙のうちに整数の比較になる話は有名ですが、16進数の文字列でもそうなります。

<?php
// 整数として比較
var_dump('0' == '00'); // bool(true)

// 16進数
var_dump('0x010' == 0x010); // bool(true)
var_dump('0x010' == 16);    // bool(true)
var_dump('0x010' == '16');  // bool(true)

// 8進数???
var_dump('010' == 010);  // bool(false)
var_dump('010' == 10);   // bool(true)
var_dump('010' == '10'); // bool(true)

が・・・8進数の場合は先頭のゼロをなくして10進数として解釈されています。解せぬ