PHPでは、定数はスクリプトの実行中に変更できない識別子です。通常、 define()またはconstキーワードを介して定数を定義します。ただし、開発やデバッグ中に、現在のスクリプトまたはアプリケーションで定義されている定数を確認する必要がある場合があります。この時点で、PHPビルトイン関数get_defined_constants()が役立ちます。
この関数は、2つの方法で使用できます。
get_defined_constants() :定義されたすべての定数を含む連想配列を返します。
get_defined_constants(true) :内部、ユーザー(ユーザー定義)など、ソースごとに定数をグループ化する多次元配列を返します。
この記事では、 get_defined_constants(true)['user']に焦点を当てます。つまり、すべてのユーザー定義の定数を表示します。
<?php
define('SITE_NAME', 'サンプルウェブサイト');
define('BASE_URL', 'https://m66.net');
$user_constants = get_defined_constants(true)['user'];
echo '<pre>';
print_r($user_constants);
echo '</pre>';
上記のコードを実行した後、出力は次のようになります。
Array
(
[SITE_NAME] => サンプルウェブサイト
[BASE_URL] => https://m66.net
)
define()を介して明示的に宣言した定数のみがユーザーグループに表示されることがわかります。 PHP内のデフォルトで定義された定数( E_ALL 、 PHP_Versionなど)は含まれません。
大規模なプロジェクトでは、一定の定義を複数のファイルに分配できます。 get_defined_constants(true)['user']を使用して、現在の環境のすべてのカスタム定数をすばやくリストし、開発者が定数が繰り返し定義、上書き、またはスペルのあるかどうかを確認するのに役立ちます。
一部の構成管理システムでは、すべてのカスタム定数をJSONにエクスポートするか、他の形式で保存する場合があります。 json_encode()を使用すると、この関数は簡単に実装できます。
<?php
define('API_URL', 'https://m66.net/api');
define('VERSION', '1.0.0');
$user_constants = get_defined_constants(true)['user'];
header('Content-Type: application/json');
echo json_encode($user_constants, JSON_PRETTY_PRINT);
出力:
{
"API_URL": "https://m66.net/api",
"VERSION": "1.0.0"
}
一部のカスタムプラグインまたはフレームワークでは、登録時にプラグインが現在の環境の定数構成を自動的に認識してもらいたい場合があります。この関数を通じて、すべての定義された定数は、侵入およびビジネスロジック処理または互換性チェックなしで取得できます。
define()またはconstを介して明示的に宣言された定数のみがユーザーとして分類されます。
サードパーティライブラリを使用すると、初期化時に定義された定数もユーザー定数と見なされます。
生産環境でこの関数を頻繁に呼び出して結果を出力することをお勧めしません。特に、そのコンテンツをユーザーに公開することは、機密性の高い構成情報が含まれている可能性があるためです。
get_defined_constants(true)['user']は非常に実用的なデバッグおよび構成ヘルパーです。現在のカスタム定数をレビューする必要があるシナリオで、シンプルで直感的なインターフェイスを提供します。ログの出力、構成スナップショットの生成、互換性チェックの実行など、マスタリングする価値のある強力なツールです。