次の結果が 34 になるのはなぜですか? 8進数とは何の関係もないようです。
intval(042);
しかし、先頭の 0 は多くの言語で 8 進数を示しています。
これは 8 進数と関係があり042
、8 進数として解釈されます。42
4 * 8 + 2 = 34
PHP スクリプトのロード中に数値リテラルが解析されると、8 進数の解釈が行われることに注意してください。値はすでに整数であるため、ここでは何もしintval()
ません。
8 進数の解釈は、文字列を整数にキャストする場合ではなく、数値リテラルでのみ行われます。
intval(042) // == 34
intval('042') // == 42
(int)'042' // == 42
この関数に先頭に「0」が付いた文字列値を渡すときは注意してください。「042」を指定すると、BASE 8-9として扱われ、デフォルトの基数である10進値に変換されます。
これを通過してください
それは単に関数がどのように定義されているかです。先頭のゼロは、接頭辞としての 0x が 16 進数を意味するのと同様に、それを 8 進数として解析する命令です。詳細については、ドキュメントを参照してください。