Возврат по ссылке приносит пользу, когда определить переменную, к которой требуется привязать ссылку, нужно через функцию. Возвратом по ссылке не пользуются для повышения производительности. Ядро PHP само оптимизирует производительность. Ссылки возвращают только по веским техническим причинам. Ссылки возвращает следующий синтаксис:
<?php
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
?>
Замечание: Передача аргумента по ссылке отличается от возврата по ссылке тем, что для возврата по ссылке знак
&
придётся указать в двух местах — чтобы указать, что требуется возврат ссылки на свойство, а не копии свойства, и чтобы указать, что переменную $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');
не сработает, а выдаст фатальную ошибку.