PHPのヒアドキュメント内で定数や関数を動かす

定数展開1

PHPのヒアドキュメント内で定数を展開したい時があるかもしれない。
検索したら次のような方法があるらしい。なぜ動くのかは考えていない。

const 円周率 = 3.14;

$定数 = '定数';
function 定数($constant){ return $constant; }

print <<<EOF
{$定数(円周率)}
EOF;
//3.14と表示される

定数展開2

ヒアドキュメント内で {$定数(円周率)} と書くのは冗長と思うなら次の方法で

const 円周率 = 3.14;
extract(get_defined_constants());

print <<<EOF
$円周率
EOF;
//3.14と表示される

get_defined_constants()で定数一覧を連想配列の形で取得し、extract()で”定数名”と同じ名前の変数を作成し、値にその定数値を入れている。

定数展開そもそも論

定数展開2で示したように、あらかじめ定数を変数に入れておくだけで済む問題であって、あまり考えるような話題ではなかったりする。

関数展開

関数展開についてはこんな感じで

$phpversion = 'phpversion';

print <<<EOF
{$phpversion()}
EOF;
//5.6.0と表示される

関数展開 おまけ

定数展開2みたいに関数の一覧を取得して、というのも考えてみたけど面倒だった。
とりあえず使えそうな関数をピックアップしておく。

//ユーザ定義関数一覧。配列の形で返ってくる。関数に添え字はPHP5.4以降で使える
get_defined_functions()['user'];

//内部関数一覧。同上
get_defined_functions()['internal'];

//配列Aをキー、配列Bを値とした連想配列を作成する
array_combine(配列A, 配列B);

以上を整理してユーザ定義関数だけを利用する場合は次のようになる


$functions = get_defined_functions();
extract(array_combine($functions['user'], $functions['user']));

print <<<EOF
{$ユーザが定義した関数名()}
EOF;
カテゴリー PHP

コメントをどうぞ~