[PHP-users 24121] Re: 可変変数について

HIGASHI Taku oolong @ cslab.co.jp
2005年 1月 13日 (木) 17:53:55 JST


東志です

foreach()で用いる $keyを関数スコープ内に閉じ込めとくのがポイントです。
--
<?php
MyRegisterGlobals();
echo "aaa = $aaa, key = $key, bbb= $bbb<br>";
exit;

function MyRegisterGlobals() {
    foreach ($_GET as $key => $value) {
        $GLOBALS[$key] = $value;
    }
}
?>
--
上記は取り敢えず可能…というだけであり、 register_globalsが offになった
理由を踏まえて、$_GET[], $_POST[], $_REQUEST[]を使うようにソースを修正す
るのが本筋だと思います。

では。

From: Koichi Shimamura <MAF01541 @ nifty.ne.jp>
Subject: [PHP-users 24118] 可変変数について
Date: Thu, 13 Jan 2005 13:41:08 +0900

> 島村です。
> 
> $_POST や $_GET を展開して利用しようと次のようなスクリプトを組みました。
> 
>       1 <?php
>       2     foreach ($_GET as $key => $value) {
>       3         $$key = $value;
>       4     }
>       5     echo "aaa=$aaa, key=$key, bbb=$bbb";
>       6 ?>
> 
> これを次のように呼び出すと
> 
> http://192.168.0.3/test.php?aaa=456&key=123&bbb=789
> 
> このような結果となってしまいます。
> 
> aaa=456, key=bbb, bbb=789
> 
> 2つ目の引数 key とスクリプト内で用いている $key がダブってしまってうまく変数
> に値をセットできません。変数名がダブらないようにすれば期待通りに展開して値をセ
> ットしてくれます。
> 
> $$key を ${$key} としても結果は同じでした。
> 
> register_globals が off に切り替わったための逃げの処理なのですが、皆さんどのよ
> うにされていますか?


PHP-users メーリングリストの案内