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

UNO Shintaro uno @ venus.dti.ne.jp
2005年 1月 13日 (木) 15:16:46 JST


>register_globals が off に切り替わったための逃げの処理なのですが、皆さんどのよ
>うにされていますか?
>  
>
一応確認ですが、register_globals=offの意義は理解しておられますよね?
その「逃げ」は、あるべき処理(パラメータとパラメータ以外をきちんと区別して
管理する)に置き換えることが前提での、一時的な対策ですよね?
もし、万が一「逃げっぱなし」で行こうと考えておられるのなら、それは非常に
危険ですよ。

逃げの手段として、単純な「foreach+動的変数代入」は島村さんもお気づき
のように既存変数を上書きしてしまうので最悪の手段です。マシな手段は
extract($_GET, EXTR_SKIP);
のようにして既存変数を上書きしないようにしつつ展開することです。
しかしこれは変数の初期化を忘れているコードでは危険性が残ったままに
なります。

既存変数の上書きを避けるには、
extract($_GET, EXTR_PREFIX_ALL, 'get');
のようにプレフィックス付きで展開する手もありますが、これはパラメータを
使う側にも書き換えが必要で、$_GET[]を使うのと手間が大して変わりません。

参照:
http://www.php.net/extract

-- 
UNO Shintaro, 宇野 信太郎  ( mailto:uno @ venus.dti.ne.jp )
http://www.venus.dti.ne.jp/~uno/  http://d.hatena.ne.jp/uno/
GnuPG Key fingerprint = E278 2406 1A24 F1FB 2DF8  1B1D 3DEA 984E 120B 5302




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