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

作成日: 更新日:

get_defined_constants関数は、スクリプト内で定義されている全ての定数を取得するために実行する関数です。PHPにおける定数とは、一度定義されるとその値が変更されることのない特別な識別子のことです。この関数は、PHP言語自体が提供する組み込みの定数や、開発者がdefine()関数やconstキーワードを用いて独自に定義した定数など、現在の実行環境で利用可能な全ての定数を一覧で取得することができます。

この関数は通常、定数名とそれに対応する値を格納した連想配列を返します。例えば、配列のキーが定数名(例: "PHP_VERSION")、その値が定数の具体的な値(例: "8.4.12")となります。オプションの引数categorizetrueを指定すると、定数を「コア」や「日付と時刻」といった関連するカテゴリごとに分類した多次元配列として取得することも可能です。falseを指定するか、引数を省略した場合は、分類されずに全ての定数が一つの連想配列として返されます。

get_defined_constants関数は、デバッグ作業を行う際や、実行中のPHP環境でどのような定数が利用できるかを確認したい場合に非常に有用です。また、スクリプト内で特定の定数がすでに定義されているか動的にチェックするといった用途にも利用できます。この関数を使うことで、PHPの実行環境をより深く理解し、柔軟なプログラミングを実現するための手助けとなります。

基本的な使い方

構文(syntax)

<?php
$allConstants = get_defined_constants();
print_r($allConstants);

$categorizedConstants = get_defined_constants(true);
print_r($categorizedConstants);
?>

引数(parameters)

bool $categorize = false

  • bool $categorize = false: 定数をカテゴリ分けして取得するかどうかを指定する真偽値。true にすると、定数が定義されているエクステンションごとにグループ化されます。

戻り値(return)

array

get_defined_constants関数は、現在定義されているすべての定数の連想配列を返します。配列のキーには定数名が、値にはその定数の値が格納されます。

サンプルコード

PHPの定義済み定数を取得する

<?php

/**
 * PHPのget_defined_constants関数の使用例。
 * この関数は、現在定義されている全ての定数を配列として返します。
 * 引数によって、定数をカテゴリ別に分類して取得することも可能です。
 */

// ユーザー定義の定数をいくつか作成します
define('MY_APP_VERSION', '1.0.0');
define('DEBUG_MODE', true);
const MAX_ITEMS = 100; // constキーワードでも定数を定義できます

echo "--- カテゴリ分けなしで全ての定数を取得 (get_defined_constants()) ---\n";
// get_defined_constants() を引数なしで呼び出すと、全ての定数がフラットな配列で返されます
// キーが定数名、値が定数の値となります
$allConstants = get_defined_constants();
print_r($allConstants);
// 出力は非常に長くなるため、一部の定数だけ確認することも可能です
// echo "\n[MY_APP_VERSION]: " . $allConstants['MY_APP_VERSION'] . "\n";
// echo "[DEBUG_MODE]: " . ($allConstants['DEBUG_MODE'] ? 'true' : 'false') . "\n";
// echo "[MAX_ITEMS]: " . $allConstants['MAX_ITEMS'] . "\n";


echo "\n--- カテゴリ分けして全ての定数を取得 (get_defined_constants(true)) ---\n";
// get_defined_constants(true) を呼び出すと、定数がその所属カテゴリ(例: "Core", "pcre", "user" など)
// ごとに分類された連想配列として返されます。
// "user" カテゴリには、ユーザーが定義した定数が含まれます。
$categorizedConstants = get_defined_constants(true);
print_r($categorizedConstants);
// カテゴリ別にアクセスする例
// echo "\n[User Defined Constants]:\n";
// print_r($categorizedConstants['user']);

echo "\n--- ユーザー定義定数のみにアクセスする例 ---\n";
if (isset($categorizedConstants['user'])) {
    print_r($categorizedConstants['user']);
} else {
    echo "ユーザー定義定数はありません。\n";
}

?>

PHPのget_defined_constants関数は、現在PHPスクリプト内で定義されている全ての定数を配列として取得する際に使用します。この関数は、プログラムの実行中にどのような定数が利用可能かを確認したい場合に役立ちます。

引数$categorizeには真偽値(trueまたはfalse)を指定でき、デフォルトはfalseです。 $categorizefalseを指定するか、引数なしで呼び出した場合、戻り値は定数名がキー、その値が要素となるフラットな連想配列になります。例えば、define()constキーワードで定義したユーザー定義定数、およびPHP自身が提供する組み込み定数などが全て含まれます。

一方、$categorizetrueを指定して呼び出すと、戻り値は定数がその所属するカテゴリ(例えば、PHPのコア定数、特定の拡張モジュールによる定数、そしてユーザーが定義した定数は'user'カテゴリ)ごとに分類された多次元連想配列になります。これにより、特定の種類の定数に絞ってアクセスしたい場合に便利です。例えば、$categorizedConstants['user']とすることで、自分で定義した定数のみを簡単に取得できます。戻り値は常にarray型です。

get_defined_constants()はPHPが提供する非常に多くの内部定数も含むため、引数なしで出力すると情報量が膨大になる点に注意が必要です。引数にtrueを渡すことで、定数を種類別に分類でき、ユーザーが自分で定義した定数は'user'カテゴリから効率的に取得できます。取得した配列にはdefine()で定義した定数とconstキーワードで定義した定数の両方が含まれます。本関数で取得できる情報にはPHPの実行環境に関する機密性の高い内容が含まれる場合があるため、本番環境で直接ユーザーに表示することは避け、開発時のデバッグや内部的な利用に限定してください。特定の定数にアクセスする前には、isset()などでその定数が存在するかどうかを確認すると、エラーを防ぎ安全にコードを記述できます。

PHPでユーザー定義定数を取得する

<?php

/**
 * ユーザー定義の定数をいくつか定義します。
 * 定数は、`define()` または `const` キーワードで定義できます。
 */
define('APP_NAME', 'MyAwesomeApp');
const APP_VERSION = '1.0.0';
define('DEBUG_MODE', true);
const MAX_ITEMS_PER_PAGE = 20;

/**
 * 現在定義されているユーザー定義の定数を取得し、表示する関数です。
 * get_defined_constants() 関数を使用して、定数をカテゴリ別に取得します。
 */
function displayUserDefinedConstants(): void
{
    // get_defined_constants(true) を呼び出し、定数をカテゴリ別に取得します。
    // これにより、定数は 'internal'(PHP内部)や 'user'(ユーザー定義)などのカテゴリに分類されます。
    $allConstants = get_defined_constants(true);

    // 'user' カテゴリに定義されている定数のみを抽出します。
    // PHP 8.4.12では、null合体演算子 (??) を使用して安全にアクセスできます。
    $userConstants = $allConstants['user'] ?? [];

    echo "=== ユーザー定義の定数一覧 ===\n";

    if (empty($userConstants)) {
        echo "現在、ユーザー定義の定数はありません。\n";
    } else {
        foreach ($userConstants as $name => $value) {
            echo "定数名: " . $name . ", 値: ";
            // 定数の値に応じて表示を調整し、見やすくします。
            if (is_bool($value)) {
                echo ($value ? 'true' : 'false') . "\n";
            } elseif (is_string($value)) {
                echo "'" . $value . "'\n";
            } elseif (is_scalar($value)) { // 数値なども含むスカラー値
                echo $value . "\n";
            } else {
                echo gettype($value) . " (非表示)\n"; // スカラー値以外は型のみ表示
            }
        }
    }
}

// 関数を実行して、定義されているユーザー定義の定数を表示します。
displayUserDefinedConstants();

PHPのget_defined_constants関数は、現在定義されているすべての定数を取得するために使用されます。この関数は、プログラム内で利用可能な定数を一覧表示したり、特定の定数の存在を確認したりする際に役立ちます。

引数$categorizebool型で、デフォルト値はfalseです。この引数にtrueを渡すと、戻り値の配列は定数の定義元に基づいてカテゴリ分けされます。具体的には、PHP内部で定義されている定数はinternalカテゴリに、ユーザーがdefine()関数やconstキーワードで定義した定数はuserカテゴリに分類されます。falseの場合は、すべての定数がカテゴリ分けされずに一つのフラットな配列として返されます。

戻り値はarray型で、定数名とそれに対応する値のペアが含まれます。$categorizetrueの場合、配列のキーはカテゴリ名(例: 'user')となり、その値としてカテゴリ内の定数配列が格納されます。

サンプルコードでは、まずdefine()constキーワードを使ってユーザー定義の定数をいくつか設定しています。次に、displayUserDefinedConstants関数内でget_defined_constants(true)を呼び出し、定数をカテゴリ別に取得しています。これにより、$allConstants['user']としてユーザー定義の定数のみを安全に抽出できます。抽出された定数はループ処理で一つずつ取り出され、定数名とその値が整形されて表示されます。特に、値が真偽値や文字列の場合に分かりやすく表示されるよう調整されています。

get_defined_constants()関数でユーザー定義の定数を取得する際は、引数にtrueを指定しカテゴリ別に取得することが重要です。これにより、返される配列の['user']キーから、自身で定義した定数を安全に抽出できます。?? [](null合体演算子)を使用すると、ユーザー定義の定数が存在しない場合でもエラーを回避し、堅牢なコードになります。定数には様々な型の値が含まれるため、画面表示などを行う際は、is_boolなどの型チェックを用いて、それぞれの値に適した形式で出力することが望ましいです。define()constの両方で定義された定数が含まれます。

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