※ ChatGPTを利用し、要約された質問です(原文:PHPの参照わたしについて)
PHPの参照渡しについての質問
このQ&Aのポイント
PHPの参照渡しについて質問です。ユーザー定義関数の引数を参照渡しする場合、値のコピーが行われないことを確認したいです。
関数の引数に渡すときと返り値を返すときに値のコピーが行われることを知りたいです。
PHPの動作よりも軽いプログラムを作成するために、関数の返り値を参照渡しにする方法について知りたいです。
PHPの参照わたしについて質問です。
例えば、ユーザー定義関数の引数を参照渡しとする場合
function test(&$string){
$string .="参照渡し";
}
$aaa = "文字列";
test($aaa);
print $aaa;
等とすると、一切値のコピーがおこなわれませんよね?
次に
function test($string){
$string . ="参照渡し";
return $string;
}
$bbb ="文字列";
$ccc = test($bbb);
print $ccc;
と上記のようにした場合、値のコピーが行われるのは
関数の引数に渡すときと
返り値を返すときの2回行われてるんですかね?
もし、値のコピーが二回行われているとするなら
次のようにしたら値のコピーは一度だけ・・・少なくとも上の例よりPHPの動作より
軽い?ものになるのでしょうか・
function &test($string){
$string .= "参照わたし";
return $string;
}
$ddd = "文字列";
$eee =& test($ccc); //ここで関数の返り値を参照渡しする
この場合、値のコピーが行われるのは関数に引数を渡すときの1回だけでしょうか?
copy on write による動きは無視しておいて、
オブジェクト指向なプログラムでなくユーザー定義関数であれば
このように関数の返り値を参照わたしにした方が、理論的?には早いのでしょうか?
この場合、引数も参照渡しにすると破壊的関数になるのでそれは避けたいが、
なるべく値のコピーは防ぎたいという状況だと考えてください。
実際、こんな風にすべてのユーザー定義関数の返り値を参照にして定義するなんてこと
おそらくないとおもうのですが、単純にコピーの回数がきになったのです。
よろしく御願いします。