[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']等)使えたんですがこれって使い方としては間違っているので
しょうか?