【PHP8.x】get_debug_type関数の使い方

get_debug_type関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

get_debug_type関数は、与えられた変数の型名を、デバッグ用途に適した具体的な文字列として取得する関数です。PHPには似た機能を持つgettype関数がありますが、get_debug_typeはより詳細で分かりやすい型名を返します。例えば、gettypeがオブジェクトに対して一律に"object"と返すのに対し、get_debug_typeは"stdClass"や"MyClass"のように具体的なクラス名を返します。また、整数は"int"、浮動小数点数は"float"、論理値は"bool"といった、PHPの型宣言で使われるキーワードと同じ文字列を返すため、コードの一貫性が保たれます。リソース型の場合も同様で、gettypeが単に"resource"と返すのに対し、"resource (stream)"のようにリソースの種類を含んだ文字列を返すため、変数の状態をより正確に把握できます。クローズされたリソースに対しては"resource (closed)"を返します。この関数は、プログラムのデバッグ中に変数の内容を確認したり、例外やエラーメッセージを生成する際に、開発者にとってより有益な情報を提供することを目的としています。引数に型を調べたい変数を一つ渡し、その型名を表す文字列を返り値として受け取ります。

構文(syntax)

1<?php
2class MyApplicationController {}
3$instance = new MyApplicationController();
4echo get_debug_type($instance);

引数(parameters)

mixed $value

  • mixed $value: デバッグ情報を取得したい任意の値

戻り値(return)

string

指定された変数や値のデバッグ用の型名を文字列で返します。

サンプルコード

PHP get_debug_typeで変数の型を調べる

1<?php
2
3/**
4 * get_debug_type() 関数の基本的な使用方法を示すサンプルコード。
5 *
6 * この関数はPHP 8で導入され、変数や値のデバッグに適した型名を返します。
7 * 特にオブジェクトの型名については、gettype() よりも詳細な情報を提供します。
8 */
9function showGetDebugTypeExamples(): void
10{
11    echo "--- スカラ型 ---" . PHP_EOL;
12    // null値の型
13    $nullValue = null;
14    echo "nullValue (" . var_export($nullValue, true) . "): " . get_debug_type($nullValue) . PHP_EOL;
15
16    // 真偽値の型
17    $boolValue = true;
18    echo "boolValue (" . var_export($boolValue, true) . "): " . get_debug_type($boolValue) . PHP_EOL;
19
20    // 整数の型
21    $intValue = 123;
22    echo "intValue (" . var_export($intValue, true) . "): " . get_debug_type($intValue) . PHP_EOL;
23
24    // 浮動小数点数の型
25    $floatValue = 3.14;
26    echo "floatValue (" . var_export($floatValue, true) . "): " . get_debug_type($floatValue) . PHP_EOL;
27
28    // 文字列の型
29    $stringValue = "Hello, World!";
30    echo "stringValue (" . var_export($stringValue, true) . "): " . get_debug_type($stringValue) . PHP_EOL;
31    echo PHP_EOL;
32
33    echo "--- 複合型 ---" . PHP_EOL;
34    // 配列の型
35    $arrayValue = [1, 2, 'three'];
36    echo "arrayValue: " . get_debug_type($arrayValue) . PHP_EOL;
37
38    // 標準クラス (stdClass) のインスタンスの型
39    $stdObject = new stdClass();
40    echo "stdObject: " . get_debug_type($stdObject) . PHP_EOL;
41    echo PHP_EOL;
42
43    echo "--- ユーザー定義クラスと無名クラス ---" . PHP_EOL;
44    // ユーザー定義クラスの例
45    class MyCustomClass
46    {
47        public string $name = "Custom";
48    }
49    $myObject = new MyCustomClass();
50    echo "myObject: " . get_debug_type($myObject) . PHP_EOL;
51
52    // 無名クラスの例 (PHP 7 以降で利用可能)
53    $anonymousObject = new class {
54        public function __construct()
55        {
56            // 無名クラスのコンストラクタ
57        }
58    };
59    echo "anonymousObject: " . get_debug_type($anonymousObject) . PHP_EOL;
60    echo PHP_EOL;
61
62    echo "--- リソース型 ---" . PHP_EOL;
63    // リソース型の例 (ファイルポインタ)
64    // 一時ファイルを作成してリソースを取得
65    $tempResource = tmpfile();
66    if ($tempResource !== false) {
67        echo "tempResource: " . get_debug_type($tempResource) . PHP_EOL;
68        fclose($tempResource); // リソースを解放
69    } else {
70        echo "Warning: Failed to create temporary resource for demonstration." . PHP_EOL;
71    }
72}
73
74// サンプル関数を実行して結果を表示
75showGetDebugTypeExamples();
76

PHP 8から導入されたget_debug_type関数は、変数の型をデバッグに役立つ形式で取得するために使用されます。この関数はmixed $valueという引数であらゆる型の値を受け取り、その値の型を示すstring型の文字列を返します。従来のgettype()関数と異なり、オブジェクトに対してはクラス名を具体的に返すため、stdClassやユーザー定義クラス、無名クラスなど、オブジェクトの種類をより詳細に判別できます。

サンプルコードでは、null、真偽値、整数、浮動小数点数、文字列といった基本的なスカラ型から、配列、標準オブジェクト、自作クラスのインスタンス、さらにはファイルリソースのようなリソース型まで、様々なデータ型がget_debug_type関数によってどのように評価されるかを示しています。それぞれの値に対して、正確なデバッグ用型名を取得できることが確認できます。この関数は、予期せぬ型の値が渡された際の原因究明や、コードの動作確認において、非常に強力なツールとして役立ちます。

この関数はPHP 8以降で利用可能です。古いPHPバージョンでは動作しませんので、実行環境のPHPバージョンを確認してください。主に変数や値のデバッグ時に正確な型名を知るために使用します。特にオブジェクトの場合、gettype()関数よりも詳細なクラス名を返します。どのような型の値を渡しても、常にその型名を表す文字列が返されます。型に基づいて処理を分岐させる際は、is_string()やis_array()といった型チェック関数や、オブジェクトの場合はinstanceof演算子を使用することが一般的です。この関数はデバッグ用途に特化していることを理解してお使いください。

関連コンテンツ

【PHP8.x】get_debug_type関数の使い方 | いっしー@Webエンジニア