はじめに
PHP8 上級試験の学習中に「dechex() 関数に 16進数リテラル(0xff)を渡すとエラーになるのでは?」と混乱するポイントがあります。実際にはエラーにはならず、正しく動作します。本記事ではその理由と注意点を解説します。
目次
dechex() 関数の仕様
dechex() は 10進整数を 16進数文字列に変換する関数です。
dechex(int $num): string- 引数は 整数型 (int) が必要。
- 返り値は 16進数の文字列。
数値リテラルの基数とPHPの解釈
PHP では数値を複数の基数で表記できます。
- 10進数:
255 - 16進数:
0xff→ 整数 255 として扱われる - 2進数:
0b11111111→ 整数 255 - 8進数:
0o377(PHP8.1以降) → 整数 255
ポイント: どの表記をしても「中身は整数」であること
実際のコード例
<?php
declare(strict_types=1);
error_reporting(-1);
$hex = dechex(0xff);
var_dump($hex);実行結果:
string(2) "ff"→ エラーではなく、正しく "ff" が返ります。
エラーになるケース
文字列を渡すと strict_types=1 のため TypeError が発生します。
<?php
declare(strict_types=1);
var_dump(dechex("0xff"));結果:
Fatal error: Uncaught TypeError: dechex(): Argument #1 ($num) must be of type int, string given ...まとめ
0xffは 整数リテラル なのでdechex(0xff)は"ff"を返す。- エラーにはならない。
"0xff"のように文字列で渡した場合はTypeErrorになる。
