Ответ
В PHP амперсанд (&) — это оператор, который работает со ссылками. Он позволяет двум или более переменным указывать на одну и ту же область памяти.
Основные применения:
-
Передача аргументов в функцию по ссылке: Без амперсанда функция работает с копией значения. С амперсандом — напрямую с оригинальной переменной.
function addPrefix(&$string) { $string = 'Mr. ' . $string; } $name = 'Smith'; addPrefix($name); // Передаем $name по ссылке echo $name; // Вывод: Mr. Smith (оригинальная переменная изменена) -
Возврат ссылки из функции: Позволяет функции возвращать не значение, а ссылку на переменную.
class Config { private $settings = []; public function &getValueRef($key) { return $this->settings[$key]; } } $config = new Config(); $ref = &$config->getValueRef('timeout'); $ref = 30; // Это изменит значение непосредственно в $settings['timeout'] -
Создание ссылки между переменными:
$original = 100; $reference = &$original; // $reference теперь псевдоним для $original $reference = 200; echo $original; // Вывод: 200
Важно понимать:
- В современном PHP (начиная с версии 5+) объекты всегда передаются по ссылке по умолчанию, поэтому явное использование
&для объектов обычно избыточно. - Чрезмерное использование ссылок может усложнить чтение кода и отслеживание побочных эффектов, поэтому их применяют осознанно, в основном для оптимизации работы с большими массивами или в специфических паттернах.