[PHP-users 15283]Re: foreach()が正常動作しない
komura
komura @ ma9.seikyou.ne.jp
2003年 5月 14日 (水) 20:00:55 JST
komura です。
参照で使用した変数( $item )を使い回しているのが原因だと思いますので、
foreach の問題ではないと思います。
On Wed, 14 May 2003 17:05:01 +0900 (JST)
"ISIGE, Akira" <xia @ silvia.com> wrote:
> 以下のコードで,foreach() が妙な挙動を示します.
>
> ---------------------
> <?php
> // add で項目を追加できる,リストのクラスを定義します
> class testClass{
> var $list;
> function &add(){
> $newitem = new stdClass;
> $this->list[] =& $newitem;
> return $newitem;
> }
> }
> // ループしながらリストにオブジェクトを追加していきます
> $test_class = new testClass();
> foreach( array( 1, 2, 3 ) as $i ){
> $item =& $test_class->add();
> $item->hoge = $i;
> // unset( $item ); // ←※
> }
この部分で $item が参照として残っていますので
上の foreach を抜けた後で
unset( $item );
を実行するか、
> // リストを foreach() で回して出力します
> foreach( $test_class->list as $item ){
> print $item->hoge. " ";
> }
ここの foreach で使用する変数を $item 以外にすることで
解決できると思います。例えば、$temp など。
foreach( $test_class->list as $temp ){
print $temp->hoge. " ";
}
個人的には、参照で使用した変数を使用しなくなった時点で unset する
方が、別の場所で間違って同じ変数を使用することを防ぐという点で
は良いと思います。
--
小邨 孝明
komura @ ma9.seikyou.ne.jp
PHP-users メーリングリストの案内