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進数として解釈されています。解せぬ