はじめに
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
になる。