🐘

PHPで「それまでに宣言されている定数」をすべて表示する方法

に公開

get_defined_constants()関数の利用

PHPでは、現在定義されているすべての定数を配列として取得するには get_defined_constants() 関数を使用します。この関数は、グローバルに定義された定数だけでなく、拡張モジュールやユーザー定義の定数も含めて一覧で取得できます。

基本的な使い方

print_r(get_defined_constants());

このように記述すると、その時点で定義されているすべての定数(定数名 => 値)が連想配列で表示されます。

ユーザー定義定数のみを表示したい場合

get_defined_constants(true) のように引数に true を渡すと、定数がカテゴリごとに分類された多次元配列が返ります。その中の 'user' キーにユーザー定義定数が格納されています。

$all_constants = get_defined_constants(true);
print_r($all_constants['user']);

出力例

Array
(
    [MY_CONSTANT] => 1
    [ANOTHER_CONST] => 'sample'
)

この方法で、「それまでに宣言されている定数」をすべて確認できます。

PHPの定数カテゴリと「システムのもの」について

get_defined_constants(true) を使うと、定数がカテゴリごとに分類されて取得できます。
この「カテゴリ」は、PHP本体や拡張モジュールごと、そしてユーザー定義(user)などに分かれています。

主な「システムのもの」カテゴリ

一般的に、以下のカテゴリはPHP本体や拡張モジュールが自動的に定義する「システムのもの」です。
これらはPHPのバージョンやインストールされている拡張によって多少異なりますが、どの環境でも共通して存在します。

カテゴリ名 内容例
Core PHP本体が定義する定数(E_ERROR, PHP_VERSIONなど)
pdo PDO拡張が定義する定数
date 日付・時刻関連の拡張定数
libxml libxml拡張の定数
standard 標準拡張の定数
Reflection Reflection拡張の定数
SPL SPL(Standard PHP Library)の定数
... その他、拡張名と同じカテゴリ名

user カテゴリのみがユーザー定義の定数となります。

「システムのもの」を無視するには

  • get_defined_constants(true) の戻り値配列から 'user' 以外のカテゴリを無視すれば、システム定数を除外できます。
  • つまり、$all['user'] だけを使えばOKです。

まとめ

  • Corepdo など、user 以外のカテゴリはすべてシステムや拡張の定数です。
  • ユーザー定義定数だけを扱いたい場合は、get_defined_constants(true)['user'] を利用し、それ以外のカテゴリは無視してください。

Discussion