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