Возврат по ссылке полезен, когда вы хотите использовать функцию, чтобы найти, к какой переменной должна быть привязана ссылка. Не используйте возврат по ссылке для повышения производительности. Движок автоматически оптимизирует это самостоятельно. Возвращайте ссылки только тогда, когда у вас есть веская техническая причина для этого. Чтобы вернуть ссылки, используйте этот синтаксис:

<?php
class foo {
    public $value = 42;

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

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;                // prints the new value of $obj->value, i.e. 2.
?>

В этом примере будет установлено свойство объекта, возвращаемого функцией getValue , а не копия, как это было бы без использования ссылочного синтаксиса.

Примечание . В отличие от передачи параметров, здесь вы должны использовать в обоих местах — чтобы указать, что вы хотите вернуть по ссылке, а не по копии, и чтобы указать, что для $myValue& должна выполняться привязка ссылки, а не обычное присваивание .

Примечание . Если вы попытаетесь вернуть ссылку из функции с синтаксисом: return ($this->value);это не сработает, так как вы пытаетесь вернуть результат выражения , а не переменную по ссылке. Вы можете возвращать переменные только по ссылке из функции и ничего больше.

Чтобы использовать возвращенную ссылку, вы должны использовать присваивание ссылки:

<?php
function &collector() {
  static $collection = array();
  return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>

Чтобы передать возвращенную ссылку другой функции, ожидающей ссылку, вы можете использовать этот синтаксис:

<?php
function &collector() {
  static $collection = array();
  return $collection;
}
array_push(collector(), 'foo');
?>

Примечание . Обратите внимание, что array_push(&collector(), 'foo');это не сработает, это приведет к фатальной ошибке.