の php.net マニュアル ページにはdefine()
、関数内から便利に呼び出すことができることを示唆するユーザー投稿のメモdefine()
があります。
軽く言い換えると、提案は次のような関数を作成することです。
<?php
function xdefine($a) {
foreach($a as $k => $v)
define($k, $v);
}
?>
その後、次のように使用します。
<?php
xdefine(array(
"SECOND" => 1,
"MINUTE" => 60,
"HOUR" => 3600,
"DAY" => 86400,
"WEEK" => 604800,
"MONTH" => 2592000, // 30 days month
"YEAR" => 31536000,
"LEAPYEAR" => 31622400
));
?>
しかし、私の感覚と私の経験の両方で、これは機能しません。呼び出しの後、各識別子は、それにバインドされていると思われるxdefine()
値ではなく、独自の名前に評価されます。xdefine()
理由はかなり明白に思えます (つまり、への呼び出しを含むモジュールxdefine()
が解析/ロードされるときにシンボルが値を取得するため)、おそらく私が見逃している微妙な点があります。この投稿の著者は、かわいい Unicode 文字を使用して関数に別の名前を付けましたが、それは見た目の違いにすぎないと確信しています。
(ところで、ループと配列の両方がモジュールスコープにある場合、 のような関数を定義せずに、配列の内容に対してxdefine()
同じforeach()
ループを実行するだけで、同様のことが機能します。これも私の観点からすると、予想される動作です。)
それで、誰かが元の投稿を見て、本当に何かがあるかどうか教えてもらえますか? それとも作者が間違ってるだけ?
(これを参照先のphp.netページに投稿しますが、代わりにここに投稿すると、質問にもっと早く目を向けることができると思います:-)