[PHP-users 15281]Re: [PHP-users15274]foreach()が正常動作しない

Seto seto @ cii.gr.jp
2003年 5月 14日 (水) 21:25:16 JST


 Setoです。
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変数はリファレンスとして存在し
$test_class->list[2] を参照していますよね。

>    // リストを foreach() で回して出力します
この時点では要素数は3ですね。
>    foreach( $test_class->list as $item ){
ループ初回時
  $item は $test_class->list[2]を参照したまま
  そこへforeachの最初の要素を代入してprint
ループ2回目
  $item は $test_class->list[2]を参照したまま
  そこへ2番目の要素を代入してprint
ループ3回目
  $item は $test_class->list[2]を参照したまま
  そこへ3番目の要素を代入してprint
  ここはループ2回目で2番目の要素を代入してしまっている。

>        print $item->hoge. " ";
>    }
>?>
>---------------------
>
>※の部分の unset をしない状態で実行すると,
>結果として
だからunsetするとOKなんでしょう。

どうでしょうか?

******************************
 Junya Seto
******************************



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