[PHP]プログラム内でdefine定義された定数を調べる方法

カテゴリ: PHP

PHPでは、define()関数を使用して、定数を作ることが可能です。

定数を切っておくと便利なのですが、定義の内容はシステム全体に及ぶため影響範囲を調べ辛いというデメリットもあります。
古くからあるアプリを保守する場合は、そもそも、何のdefine定義がされているかの把握が困難な場合があります。

このような時に、get_defined_constants()関数を利用すると、簡単に調査を行うことができます。

全てのdefine定義をダンプする

まずは、すべてのdefine() 定義を単純にダンプする方法です。

<?php
$defineInfo = get_defined_constants();
foreach ($defineInfo as $key => $value) {
    echo $key . " " . $value . PHP_EOL;
}

echo count($defineInfo) . PHP_EOL;

defineを何も定義していないプログラムですが、このコードの出力では2000個以上のdefine定義が出力されました。
これは、get_defined_constants()関数が、php自体や拡張モジュールが定義しているdefine値も取得できるためです。

define定義をカテゴリ別にダンプする

最初の例は、本当に"すべて"確認したい場合には良いですが、ちょっと見づらいのでカテゴリ別に出してみます。

get_defined_constants()の引数にtrueを指定すると、結果をカテゴリ別に取得できます。
下記のコードで、カテゴリの一覧に加えて、各カテゴリにいくつのdefine定義があるかを確認できます。

<?php
$defineInfo = get_defined_constants(true);
foreach ($defineInfo as $categoryName => $values) {
    echo $categoryName . " " . count($values) . PHP_EOL;
}

手元の環境では、以下の様に32個ものカテゴリが存在していました。

Core 87
calendar 21
date 15
filter 56
hash 32
iconv 4
json 24
mcrypt 41
pcre 15
session 3
standard 294
tokenizer 135
zlib 18
libxml 27
dom 45
xml 27
openssl 47
curl 475
fileinfo 9
ftp 11
gd 83
gmp 10
intl 171
imap 68
ldap 39
mbstring 6
exif 1
mysqli 110
sockets 110
sqlite3 11
tidy 133
xsl 14

プログラム内で、自分で定義した定数のみをダンプする

PHP本体や拡張モジュールの定義ではなく、プログラマが定義した定数はuserのカテゴリとして取得できます。

このため、下記のコードで自分で作ったconst値のみを確認することができます。

<?php
// const値を定義する
define("DEF_NUM", 1);
define("DEF_STRING", 'hello');

// プログラムで定義されたconst値のダンプ
$defineInfo = get_defined_constants(TRUE);
foreach ($defineInfo['user'] as $key => $value) {
    echo $key . " " . $value . PHP_EOL;
}

このコードの出力は、以下の様になります。

DEF_NUM 1
DEF_STRING hello
こちらもおススメ
カテゴリ: PHP

コメントを残す

メールアドレスが公開されることはありません。