定数展開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;