(PHP4格言)参照したけりゃfor使え
悪夢のような毎日が続いております。
さぁ今日もPHPネタで盛り上がっていきましょう!
何か思い通りの動きしないなーと思ってまさかと思ってPHPマニュアル見てみたんですが・・・、
foreachのイテレータって「コピー」なんですってね。勘弁してちょ。
しかもリファレンスで受け取る手段が無いんですって。勘弁してちょ。
$obj = new stdClass(); $obj->hoge = 0; $array = array(&$obj); $data = array(); foreach($array as $val) { // $valには「コピー」されたオブジェクトが格納される $data []=& $val; } $data[0]->hoge = 10; print $obj->hoge; // 「0」と表示
ってことでコピーになっちゃうんでコピーされた$data[0]->hogeを書き換えても$obj->hogeには影響しないわけです。
これを回避しようと思ったらもうfor使うしかないわけですよ。
$count = count($array); for( $i=0; $i < $count; $i++ ){ $data []=& $array[$i]; }
せっかくforeachという便利なものがあるのにこれじゃ使えねーーーーーーー!!!
なんでわざわざ先祖帰りするようなソースを書かねばならんのか誰か教えて下さい(;;)
もしかして僕が勘違いしてるだけ?使い方間違ってる?
あぁ、頭がイタイです。
ちなみにPHP5ではこの問題は解決してるみたいです。
ちゅーかどーせならPHP5でプログラムさせてくれ・・・。