[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 メーリングリストの案内