PHPでは文字列を変数名にして配列が取得出来る。
例えば
$aa = "bb"; print(${"aa"});
とすると『bb』と表示されるので、
$aa = "bb"; $tmp = "aa"; print(${$tmp});
としても『bb』と表示される。
後者を利用して$_SERVERや$_SESSIONなど環境変数を取得したいと思ったが出来なかったのだ。
前提
例えば
『$_SESSION、$_SERVER、$_GET、$_POSTに対し順番に同じ処理をすることを、複数処理して』
という依頼が来たとする。
つまり
functionA($_SESSION)、functionA($_SERVER)、functionA($_GET)、functionA($_POST)のち、functionB($_SESSION)、functionB($_SERVER)…
として欲しいということ。
そこで最初に書いた仕組を利用し、ループで配列を取得しようと思った。
確認
まずその処理が可能なのかの確認。
http://~/?aaa=aaaとし、GETを表示させる。
print_r(${"_GET"});
GETの内容がキチンと表示される。
ところが
$tmp = "_GET"; print_r(${$tmp});
これでは何も表示されない。
何でだよ…
調査して何かわかったら追記しようと思う…
因みに当方は仕方がないからGET配列をまるっと別の配列コピーした上で対応した。
つまりはこんな感じ。
$now_get = $_GET; $tmp = "now_get"; print_r(${$tmp});
コメント