2006-07-20 悪夢
(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でプログラムさせてくれ・・・。
PHP研究所
クリック: 2回
クリック: 2回
トラックバック - http://d.hatena.ne.jp/fbis/20060720/1153353676





