[PHP-users 19827]Re: ループ内でのグローバル変数の宣言に関して

komura komura @ ma9.seikyou.ne.jp
2004年 1月 9日 (金) 22:22:59 JST


komura です。

On Fri, 9 Jan 2004 14:14:54 +0900
"Keisuke Hamanaka" <hamanaka015 @ d-cruise.co.jp> wrote:

> プログラムの本文中で似たような計算が
> 何回も出てくるので、次のような関数を
> 作ってみたのですが、変数のグローバル宣言のところで
> エラーが出てしまいます。
> ---------------------------------
> function keisan($i){
>  for ($j=$i;$j<=23;$j++){
>   global $h{$j};
>   $h{$j}=$h{$j} + 1;
>  }
> }
> ---------------------------------

他の方が書いておられるように、クラス変数や配列を使用する方が
良いと思いますが、この場合だと、以下のようにすれば、実行可能です。

function keisan( $i )
{
	for ( $j = $i; $j <= 23; ++$j ){
		global ${'h'.$j};
		++${'h'.$j};
	}
}

または、

function keisan( $i )
{
	for ( $j = $i; $j <= 23; ++$j ){
		++$GLOBALS['h'.$j];
	}
}


> また、$h{$j}=$h{$j} + 1;
> という、変数名の書き方もこれでいいのか疑問です。

この $h{$i} という書き方に関してですが、
$h{$i} は $h[$i] と等価です。
PHP マニュアルには書いていないような気がします。

例えば、

$ php -r '$h{1} = 1; echo $h[1];'
1

となり、エラーにはなりません。
今回のエラーは、

  global $h{$j}; 

以下でも同じですが、

  global $h[$j];

という記述が、global は配列の一部を呼び出すことはできない
ため、エラーになっているようです。

-- 
komura <komura @ ma9.seikyou.ne.jp>


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