PHPの参照渡し方法
参照渡しについて説明しているサイトは下記のようなプログラムの書き方をしています。
<?php
$message = "php";
rewrite($message);
print($message);
function rewrite(&$args) {
$args = "TestMessage";
}
?>
これでTestMessage と出力されます。
$message を直接変更していないのに、rewrite関数 内での変更が $message に対して有効になります。
関数の引数に & をつけなければ、上書きされることはありません。
次に、変数代入の参照渡しを説明します。
変数代入の参照渡し
<?php
$message = "php";
$b = & $message;
$b = "TestMessage";
print($b);
?>
これは、TestMessge と出力されます。
2行目で $message の持つ参照先が $b に渡されているため、$message の変更と $b の変更は同義となっています。
関数の戻り値の参照渡し
<?php
class TestMessage {
var $val = "message";
function &getValue() {
return $this->val;
}
}
$message = new TestMessage();
$a = & $message->getValue();
$a = "HelloWorld!";
print($message->val);
?>
これは、HelloWorld と出力されます。
関数 &getValue の &メソッド 実行に戻り値 =&$message->getValue(); のどちらかの & が抜けても参照渡しにはなりません。