Для чего нужен амперсанд (&) в PHP?

«Для чего нужен амперсанд (&) в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP амперсанд (&) — это оператор, который работает со ссылками. Он позволяет двум или более переменным указывать на одну и ту же область памяти.

Основные применения:

  1. Передача аргументов в функцию по ссылке: Без амперсанда функция работает с копией значения. С амперсандом — напрямую с оригинальной переменной.

    function addPrefix(&$string) {
        $string = 'Mr. ' . $string;
    }
    
    $name = 'Smith';
    addPrefix($name); // Передаем $name по ссылке
    echo $name; // Вывод: Mr. Smith (оригинальная переменная изменена)
  2. Возврат ссылки из функции: Позволяет функции возвращать не значение, а ссылку на переменную.

    class Config {
        private $settings = [];
    
        public function &getValueRef($key) {
            return $this->settings[$key];
        }
    }
    
    $config = new Config();
    $ref = &$config->getValueRef('timeout');
    $ref = 30; // Это изменит значение непосредственно в $settings['timeout']
  3. Создание ссылки между переменными:

    $original = 100;
    $reference = &$original; // $reference теперь псевдоним для $original
    $reference = 200;
    echo $original; // Вывод: 200

Важно понимать:

  • В современном PHP (начиная с версии 5+) объекты всегда передаются по ссылке по умолчанию, поэтому явное использование & для объектов обычно избыточно.
  • Чрезмерное использование ссылок может усложнить чтение кода и отслеживание побочных эффектов, поэтому их применяют осознанно, в основном для оптимизации работы с большими массивами или в специфических паттернах.