PHPにて、文字列の変数名化を使った、環境変数の取得が出来ない話

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});

コメント

タイトルとURLをコピーしました