[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