《PHP8上級試験対策》dechex()関数と16進数リテラルの扱い

  • URLをコピーしました!

はじめに

PHP8 上級試験の学習中に「dechex() 関数に 16進数リテラル(0xff)を渡すとエラーになるのでは?」と混乱するポイントがあります。実際にはエラーにはならず、正しく動作します。本記事ではその理由と注意点を解説します。

キーワード:dechex()/16進数リテラル/strict_types/TypeError

目次

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

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次