Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】T_EMPTY定数の使い方

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

作成日: 更新日:

基本的な使い方

T_EMPTY定数は、PHP 8で導入されたPHP言語の構文解析に関連する定数です。この定数は、PHPスクリプトをコンピュータが解釈しやすい最小単位である「トークン」に分解する際、特にempty()言語構造のキーワードであるemptyを識別するために使用されます。

PHPでは、token_get_all()関数などの機能を通じて、PHPコードを構成する要素(キーワード、演算子、変数名など)をトークンと呼ばれる個々の部品に分割できます。T_EMPTY定数は、これらのトークンの中からemptyキーワードを正確に見つけ出すための目印として機能します。

例えば、コード分析ツールやPHPの静的解析ツールを開発する際には、スクリプト内にempty()がどこで使われているかをプログラム的に特定するために、取得したトークン列の中でT_EMPTYの値と一致するものを検索します。これにより、特定の構文構造の出現を検出し、コードの品質チェックやリファクタリングの支援に役立てることが可能になります。

システムエンジニアを目指す皆さんにとって、この定数を直接利用する機会は稀かもしれませんが、PHPがコードを内部でどのように解釈し、構造化しているかを理解する上で、トークンとそれが表す意味を知ることは非常に重要です。T_EMPTYは、PHPの解析メカニズムの内部で特定のキーワードがどのように扱われているかを示す一例と言えるでしょう。

構文(syntax)

1<?php
2$phpCode = '<?php $value = null; ?>';
3$tokens = token_get_all($phpCode);
4
5foreach ($tokens as $token) {
6    if (is_array($token) && $token[0] === T_EMPTY) {
7        echo "T_EMPTY token detected on line " . $token[2] . "\n";
8    }
9}
10?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

PHPのソースコード解析時に、空(NULL、空文字列、0、falseなど)を表すトークンIDです。

サンプルコード

PHP empty() を使わない厳密な値チェック

1<?php
2
3/**
4 * PHPの`empty()`の使用を避け、より明確な条件で変数の「空」をチェックする関数。
5 * リファレンス情報にある`T_EMPTY`はPHP内部のトークン定数であり、通常アプリケーションコードでは使用しません。
6 * ここでは、キーワード「php don't use empty」に対応し、安全な代替手段を示します。
7 *
8 * @param mixed $value チェックする値。
9 * @return string 値の「空」の状態に関する説明。
10 */
11function checkValueStrictly(mixed $value): string
12{
13    // `empty()`は様々な値を「空」と判断するため、意図しない挙動につながることがあります(例: 0, "0", false, null, [])。
14    // その代わりに、厳密な比較(===)を用いて、より明確で予測可能なチェックを行います。
15
16    if ($value === null) {
17        return "値は厳密にNULLです。";
18    }
19
20    if ($value === '') {
21        return "値は厳密に空文字列です。";
22    }
23
24    if ($value === 0) {
25        return "値は厳密に整数0です。";
26    }
27
28    if ($value === 0.0) {
29        return "値は厳密に浮動小数点数0.0です。";
30    }
31
32    if (is_array($value) && count($value) === 0) {
33        return "値は厳密に空の配列です。";
34    }
35
36    if ($value === false) {
37        return "値は厳密に真偽値FALSEです。";
38    }
39
40    // 文字列"0"は`empty()`では空と判断されますが、厳密なチェックでは空ではありません。
41    // 必要であれば、明示的なチェックを追加します。
42    if ($value === '0') {
43        return "値は厳密に文字列'0'です。";
44    }
45
46    return "値は厳密なチェックでは「空」と見なされません。";
47}
48
49// --- 使用例 ---
50$valuesToCheck = [
51    null,        // NULL
52    '',          // 空文字列
53    0,           // 整数 0
54    0.0,         // 浮動小数点数 0.0
55    '0',         // 文字列 "0"
56    [],          // 空の配列
57    false,       // 真偽値 FALSE
58    'hello',     // 非空文字列
59    123,         // 非0整数
60    ['item'],    // 非空配列
61    true,        // 真偽値 TRUE
62    '  ',        // 空白文字のみの文字列
63];
64
65echo "--- 厳密なチェックとempty()の比較 ---" . "\n\n";
66
67foreach ($valuesToCheck as $val) {
68    $type = gettype($val);
69    $displayValue = match ($type) {
70        'NULL' => 'null',
71        'boolean' => $val ? 'true' : 'false',
72        'integer', 'double' => (string)$val,
73        'string' => "'{$val}'",
74        'array' => (empty($val) ? '[] (empty)' : '[' . implode(', ', $val) . ']'),
75        default => 'unknown'
76    };
77    echo "入力値: " . str_pad($displayValue, 15) . " | 厳密なチェック: " . checkValueStrictly($val);
78    echo " | empty()の結果: " . (empty($val) ? "TRUE" : "FALSE") . "\n";
79}

PHPのempty()関数は、変数が「空」かどうかを簡単に判定できる便利な機能ですが、整数0、文字列"0"、真偽値falseなど、多様な値を「空」と判断するため、意図しない挙動につながる可能性があります。このサンプルコードは、「php don't use empty」というキーワードに対応し、empty()の使用を避け、より明確で厳密な条件で変数の「空」をチェックする方法を、システムエンジニアを目指す初心者向けに示しています。

checkValueStrictly関数は、引数$valueとしてmixed型、つまり様々な型の値を受け取ります。戻り値は、その値がどのような「空」の状態であるか、または空ではないかを示すstring型の説明文です。関数内部では、===演算子を用いた厳密な比較により、null、空文字列''、整数0、浮動小数点数0.0、空の配列[]、真偽値falseといった特定の「空」の値を一つずつ明確に判定しています。これにより、empty()では「空」と判断される文字列"0"なども区別し、より意図した通りのチェックが可能です。

リファレンスにあるT_EMPTYはPHPの内部で使われるトークン定数であり、このサンプルコードのようなアプリケーション開発で直接使用することはありません。このように厳密なチェックを行うことで、コードの意図が明確になり、より信頼性の高いプログラムを構築できるようになります。

T_EMPTYはPHP内部の定数であり、一般的なアプリケーション開発では使用しません。PHPのempty()関数は、null0(整数・浮動小数点・文字列)、空文字列''、空配列[]falseなど、異なる複数の値を「空」として扱います。この挙動は時に意図しないバグの原因となるため注意が必要です。サンプルコードでは、empty()の使用を避け、===(厳密な比較演算子)を用いて、変数の型と値を個別に明確にチェックする安全な方法を示しています。このようにすることで、コードの意図がはっきりし、予期せぬ動作を防ぎ、より堅牢なプログラムを作成できます。

関連コンテンツ