参照を返す、定義または呼び出し時に & を省略することはできません。
これは比較的混乱を招く概念なので、特別な理由がない限り、使用しないことをお勧めします。
PHP5でリファレンスが変更されたため、PHP4/PHP5での動作に比較的大きな違いが生じ、混乱しやすいと言われています。
例を挙げてください:
コードをコピーします コードは次のとおりです:
$color = '黄緑';
関数 &getRef() {
グローバル $color;
$color を返します;
}
関数 getCopy() {
グローバル $color;
$color を返します;
}
$colorRef = &getRef();
$colorRef = 'ブルー';
//$colorCopy = getCopy();
//$colorCopy = '黒';
var_dump($color);
var_dump($colorRef);
//var_dump($colorCopy);
上記のコードを実行すると、&getRef() を使用すると $colorRef が $color にバインドされることがほぼ理解できるでしょう。これは、2 つの変数 $colorRef と $color が同じ値を指すことを意味します。いずれかの値を変更すると、もう一方の値も変更されます。
$color が配列の場合、上記のコードは PHP4/5 のどのバージョンでも同じように動作します。
$color がオブジェクトの場合に問題が発生します。
PHP4 では、getCopy はコピーされたオブジェクトを返します。&getRef() は参照を返します。
PHP5 は少し異なります
最新の PHP5.2 は PHP4 と同じように動作し、getCopy() はコピーを返し、&getRef() は参照を返します。
ただし、PHP5.1.6 など、一部の PHP5 バージョンはここで若干異なります。PHP5.1.6 では、getCopy() と &getRef() が両方とも参照であることが示されています。
ここで getCopy() と &getRef() は 2 つのグローバル関数であり、これらがクラスに配置され、クラスのメンバー関数になる場合は別の話になります...
追記: 参照を返してもパフォーマンスは向上しませんが、場合によってはパフォーマンスが低下することがあります。そのため、プログラムを「最適化」するためにこの機能を使用することを当然のことと考えないでください。
質問がある場合は、マニュアルを読むことでほとんどの場合答えが見つかります:
http://cn.php.net/manual/en/ language.references.php
;