[PHP-users 7632] Re: 外部変数の宣言について(再)
矢澤 快暁
php-users@php.gr.jp
Tue, 21 May 2002 23:07:28 +0900
矢澤です。
> PHP では変数のスコープは、グローバルスコープと関数内スコープの2つし
> か存在しません。
やはりそうですか(涙)
> グローバル変数を多用するのは、プログラムの見通しを著しく悪くするので
> なるべくなら避けた方が無難です、という一般論はおそらくおわかりだと思う
> ので置いといて。(笑)
はい、わかってはいますが現実は・・・という事で(笑)
> foreach ($GLOBALS as $name => $val) {
> // PHPがセットするものは除外
> if ((substr($name, 0, 1) != '_') && !preg_match('/^HTTP/', $name)) {
> global $$name;
> }
> }
お、これはいいですね。
今回は後藤さんに教えてもらった$GLOBALSを使って解決することにしましたが
今後の参考にさせて頂きます。
> > もしこれが不可能な場合は連想配列で変数を定義し(以下参照)
> > $A{'test01'}='testhogehoge';
> > $A{'aaaaa'}='hogehoge';
> > $A{'hoge'}='hogeeee';
> > この連想配列を関数内で
> > 一括でglobal化する方法があれば教えて下さい。
> foreach ($A as $name => $val) {
> global $$name;
> $$name = $val;
> }
> という感じでしょうか。
これなんですが、
まず
> > $A{'test01'}='testhogehoge';
'{'ではなく'['の間違いでした(他言語と混同していたようです。)
で、
$A['test01']='testhogehoge';
$A['aaaaa']='hogehoge';
$A['hoge']='hogeeee';
と直してから
関数内で
global $A;
とすると
全部($A['test01']等)使えたんですがこれって使い方としては間違っているので
しょうか?