リファレンスを返す
リファレンスを返すことは、結合する変数を見付けるために関数を使用し たい場合に便利です。パフォーマンスを向上させるためだけの目的で この機能を用いることはやめてください。 そのようなことをしなくても、PHP エンジンが自動的に最適化を行います。 リファレンスを返すのは、そうすべき妥当な理由がある場合に限られます! リファレンスを返す場合、次の構文を使用して下さい。
<?phpclass 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
について行われたのは、通常の代入ではありません。
注意:
以下のような形式で関数からリファレンスを返そうとした場合、
return ($this->value);
これは、あなたが望んでいるように 式 の結果を返してくれることはありません。 可能なことは、値へのリファレンスを返すことができるということだけで、 それ以外の何者でもありません。
返されたリファレンスを使うには、リファレンスを代入しなければなりません。
<?phpfunction &collector() { static $collection = array(); return $collection;}$collection = &collector();$collection[] = 'foo';?>
返されたリファレンスを、リファレンスを要求する別の関数に渡すには、 この構文を使います。
<?phpfunction &collector() { static $collection = array(); return $collection;}array_push(collector(), 'foo');?>
注意:
array_push(&collector(), 'foo');
は 動かないことに注意しましょう。fatal エラーとなります。