- 締切済み
参照渡しの参照渡し
こんにちは。PHPでの質問をさせて頂きます。 PHPで以下のようなコードを書いた場合値が参照渡しで返って来ません。 解決法をご存知の方がいたら是非教えて下さい。お願いします。 function &hoge(&$data,$key){ $ret=$data[$key]; } //これもダメ function hoge(&$data,$key,&ret){ $ret=$data[$key]; }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>print_r ($a); >としてもおそらく$aの中身は変わらないままなのです。 え~と・・・ $dataに代入しないと、参照渡しの効果は得られないかと? $retをあえてつかうならこんな感じ? <?PHP function hoge(&$data,$key){ $ret=&$data[$key]; $ret="xyz"; } $a=array("aaa"=>"x","bbb"=>"y","ccc"=>"z"); $b="aaa"; hoge($a,$b); print_r($a); ?>
- yambejp
- ベストアンサー率51% (3827/7415)
2番目のやつはretが変数になっていません 参照渡しについて誤解があるのでは? function hoge($data,$key,&$ret){ $ret=$data[$key]; } $a=array("aaa"=>"x","bbb"=>"y","ccc"=>"z"); $b="aaa"; hoge($a,$b,$c); print $c;
お礼
ご回答ありがとうございます。 急いで質問用に関数を書いたためミスしてしまいました。 一つ目の関数にも return がないですね。 すいません。 実際のコードにはご指摘頂いた文法間違いはないです。 提示頂いたコードなのですが、$data引数も参照渡しに していただきたいのです。 そして、関数外で$cの内容を変更して print_r ($a); としてもおそらく$aの中身は変わらないままなのです。
お礼
ありがとうございます。 そうなんです。 同じスコープ内(hoge関数内)であれば変更は確かに 反映されるんですが、関数を抜けた後に$retの内容 を変更したりして$dataの中身を変更していきたかったのです。 性質上$retをオブジェクトにしてそのプロパティに $ret=new DummyClass; $ret->property=$data[$key]; とかすれば目的は達成できるのですが、なんの意味も ないのにオブジェクトを生成してプロパティに値を入れる というのも全くもってスマートではないですし・・ やっぱり諦めて別のアプローチを探すしかないかもしれないですね。