プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。PHPでの質問をさせて頂きます。

PHPで以下のようなコードを書いた場合値が参照渡しで返って来ません。
解決法をご存知の方がいたら是非教えて下さい。お願いします。

function &hoge(&$data,$key){
 $ret=$data[$key];
}

//これもダメ
function hoge(&$data,$key,&ret){
 $ret=$data[$key];
}

A 回答 (2件)

>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);
?>
    • good
    • 0
この回答へのお礼

ありがとうございます。

そうなんです。
同じスコープ内(hoge関数内)であれば変更は確かに
反映されるんですが、関数を抜けた後に$retの内容
を変更したりして$dataの中身を変更していきたかったのです。

性質上$retをオブジェクトにしてそのプロパティに
$ret=new DummyClass;
$ret->property=$data[$key];
とかすれば目的は達成できるのですが、なんの意味も
ないのにオブジェクトを生成してプロパティに値を入れる
というのも全くもってスマートではないですし・・

やっぱり諦めて別のアプローチを探すしかないかもしれないですね。

お礼日時:2011/11/28 17:20

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;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

急いで質問用に関数を書いたためミスしてしまいました。
一つ目の関数にも return がないですね。
すいません。
実際のコードにはご指摘頂いた文法間違いはないです。

提示頂いたコードなのですが、$data引数も参照渡しに
していただきたいのです。

そして、関数外で$cの内容を変更して
print_r ($a);
としてもおそらく$aの中身は変わらないままなのです。

お礼日時:2011/11/28 16:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!