[PHP-users 7631] Re: 外部変数の宣言について(再)

KOYAMA Tetsuji php-users@php.gr.jp
Tue, 21 May 2002 22:52:42 +0900


  小山です。

At Tue, 21 May 2002 22:06:59 +0900,
矢澤 快暁 wrote:
> マニュアルの変数のスコープを参照したのですが方法がわからないので
> 投稿しました。

  PHP では変数のスコープは、グローバルスコープと関数内スコープの2つし
か存在しません。

> 複数の(非常に多くの)関数で複数の(非常に多くの)外部変数を利用したいと
> 思っています。

  グローバル変数を多用するのは、プログラムの見通しを著しく悪くするので
なるべくなら避けた方が無難です、という一般論はおそらくおわかりだと思う
ので置いといて。(笑)

> それぞれの関数内でglobal宣言をする以外に回避方法はないのでしょうか?
> ユーザー定義関数内でもglobal宣言を必要とせず使用できる変数の宣言をする方法は
> ないのでしょうか?

たとえば、こんなコードではどうでしょう?

    foreach ($GLOBALS as $name => $val) {
      // PHPがセットするものは除外
      if ((substr($name, 0, 1) != '_') && !preg_match('/^HTTP/', $name)) {
	global $$name;
      }
    }

> もしこれが不可能な場合は連想配列で変数を定義し(以下参照)
> 
> $A{'test01'}='testhogehoge';
> $A{'aaaaa'}='hogehoge';
> $A{'hoge'}='hogeeee';
>
> この連想配列を関数内で
> 一括でglobal化する方法があれば教えて下さい。

  foreach ($A as $name => $val) {
    global $$name;
    $$name = $val;
  }

という感じでしょうか。

-- 
	小山 哲志@ビート・クラフト
	koyama@beatcraft.com
	koyama@hoge.org