リファレンス

リファレンス渡し

function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a はここでは 6 です

関数コールの際には、リファレンス記号がないことに注意してください。 関数定義にのみリファレンス記号があります。リファレンスで正しく引数を 渡すには、関数定義のみで十分です。

リファレンス返し

リファレンスを返すことは、結合する変数を見付けるために関数を使用したい場合に便利です。

class foo {
    public $value = 42;

    public function &getValue() {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue は $obj->value へのリファレンス、つまり 42 となります
$obj->value = 2;              //クラスプロパティを変更している
echo $myValue;                // $obj->value の新しい値である 2 を表示します

この例では、関数 getValue により返された オブジェクトのプロパティが、設定されます。リファレンス構文を 使用しない場合のようにコピーとなるわけではありません。

パラメータを渡す場合と異なり、ここでは、通常のようにコピーでは なくリファレンスで戻り値を指定し、リファレンス結合を指定するために 両方の場所で & を使用する必要があります。 $myValue について行われたのは、通常の代入ではありません。