Returning References

Оновлено: 12.05.2023

Повернення за посиланням корисне, коли ви хочете використати функцію, щоб знайти змінну, до якої має бути прив'язане посилання. Не використовуйте повернення за посиланням для підвищення продуктивності. Рушій автоматично оптимізує це самостійно. Повертайте посилання лише тоді, коли на це є вагома технічна причина. Щоб повернути посилання, використовуйте цей синтаксис:

<?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.
?>

Зауваження: На відміну від передачі параметрів, тут ви повинні використовувати & в обох місцях - щоб вказати, що ви хочете повернути посилання, а не копію, і щоб вказати, що для $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'); не працюватиме, це призведе до фатальної помилки.