参照渡しは非推奨のようです。コメントに詳細付けてもらったのでそちらをご確認ください。
概要
公式マニュアルには以下のように記載がされています。リファレンス渡しマニュアル内では関数での利用法について記載がありますが、私が使用したforeach内での活用方法について記載します。
リファレンスにより関数に変数を渡すことが可能です。この場合、関数内で その引数を修正可能になります。構文は次のようになります。
活用方法
共有する関数内で生成されたオブジェクトにおいて、一部の要素が不要といった状況が発生しました。オブジェクトの特性
・親キーがランダムである
・削除対象の子キーが同一である
上記に倣ったオブジェクトの例
$data = [
'123456' => [
'aaa' => [...],
'bbb' => [...],
'ccc' => [...]
],
'446913' => [
'aaa' => [...],
'bbb' => [...],
'ccc' => [...]
],
'84351654' => [
'aaa' => [...],
'bbb' => [...],
'ccc' => [...]
],
];
ccc
のキーを持つオブジェクトを$data
から削除をしたいとき、以下の様にforeachで回します。
foreach($data as &$trim_data){
//親キー='ccc'のオブジェクトを削除
unset($trim_data['ccc']);
}
unset($trim_data);
var_dump($data);
出力結果
array(3) {
["123456"]=>
array(3) {
["aaa"]=>
...
["bbb"]=>
...
}
["446913"]=>
array(3) {
["aaa"]=>
...
["bbb"]=>
...
}
["84351654"]=>
array(3) {
["aaa"]=>
...
["bbb"]=>
...
}
}
まとめ
関数内で変数を参照渡しを利用して操作する場合、その変更はすべての呼び出し元に作用します。参照渡しを使用することで、関数内での変更が直接呼び出し元の変数に影響を与えることになります。
これにより、変更を意図的に呼び出し元に反映させたい場合に便利です。
一方で、参照渡しを使わない場合は、関数内での操作が呼び出し元に影響を与えません。これにより、呼び出し元の変数を安全に操作することができると思い記事にしてみました。
こっちのがいいよみたいのがあればぜひコメントで教えてください!