## Основы

Переменные в PHP обозначаются знаком доллара, за которым идёт имя переменной. Имя переменной чувствительно к регистру.

Правильное название переменной начинается с буквы в диапазонах `A-Z` или `a-z`, ASCII-символа в диапазоне со 128-го по 255-й байт или символа подчёркивания. Затем идёт произвольное количество букв, цифр или подчёркиваний. В виде регулярного выражения правило именования переменных выражалось бы вот так: `^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$`

> Замечание: PHP не поддерживает названия переменных в Юникоде, однако, отдельные кодировки символов наподобие UTF-8 кодируют символы так, что каждый байт многобайтового символа попадает в допустимый диапазон, поэтому такое название переменной становится допустимым.

> Замечание: Переменная `$this` — специальная переменная, которой нельзя присваивать значение. До PHP 7.1.0 было возможно косвенное присваивание (например, через переменные переменных).

Подсказка

Смотрите также «Руководство по именованию».

Пример #1 Правильные названия переменных

    <?php
    $var = 'Боб';
    $Var = 'Джо';
    echo "$var, $Var";      // Инструкция выведет "Боб, Джо"

    $_4site = 'ещё нет';    // Правильно; название переменной начинается с символа подчёркивания
    $täyte = 'mansikka';    // Правильно; символ 'ä' — 228-я кодовая точка в кодировке Extended ASCII

Пример #2 Неправильные названия переменных

    <?php

    $4site = 'not yet';     // Неправильно; название начинается с цифры

PHP принимает последовательность произвольных байтов как названия переменной. Названия переменных, которые не соответствуют правилам именования, доступны только динамически во время выполнения. Раздел «Переменные переменных» рассказывает, как получить доступ к переменным переменных.

Пример #3 Доступ к неизвестным именам переменных

    <?php

    ${'invalid-name'} = 'bar';
    $name = 'invalid-name';
    echo ${'invalid-name'}, " ", $$name;

Результат выполнения приведённого примера:

    bar bar

По умолчанию переменные присваиваются по значению. Поэтому когда переменной присваивают выражение, значение исходного выражения копируется в целевую переменную. Это означает, например, что после присваивания значения одной переменной другой переменной, изменение одной переменной не повлияет на другую. Дополнительную информацию об этом способе присваивания смотрите в разделе «Выражения».

PHP также предлагает другой способ присваивания значений переменным: присваивание по ссылке. Это означает, что новая переменная просто ссылается (иначе говоря, «становится псевдонимом» или «указывает») на оригинальную переменную. Изменения в новой переменной отражаются на оригинале, и наоборот.

Для присваивания по ссылке к началу имени присваиваемой (исходной) переменной просто добавляют амперсанд &. Например, следующий фрагмент кода дважды выводит «`Меня зовут Боб`»:

    <?php

    $foo = 'Боб';              // Присваивает переменной $foo значение «Боб»
    $bar = &$foo;              // Ссылка на значение переменной $foo через переменную $bar
    $bar = "Меня зовут $bar";  // Изменение значения переменной $bar...
    echo $bar . PHP_EOL;
    echo $foo . PHP_EOL;       // ...меняет и значение переменной $foo

Важно отметить, что по ссылке присваиваются только переменные.

    <?php
    $original = 25;
    $ref1 = &$original;        // Это верное присваивание
    $ref2 = &(24 * 7);         // Неверно; ссылка на неименованное выражение

    <?php
    // Обратите внимание на отсутствие символа &, который обозначает возвращаемую ссылку, в объявлении функции,
    // то есть функция не возвращает ссылку, поэтому результат нельзя присвоить по ссылке
    function test()
    {
       $original = 25;
       return $original;
    }

    // Обратите внимание: выдаётся уведомление, но значение, которое не относится к ссылке, всё равно присваивается
    $result1 = &test();        // Неверно, потому что функция test() не возвращает переменную по ссылке
    var_dump($result1);

    // Эта функция объявлена как возвращающая ссылку, но возвращает не переменную
    function &test2()
    {
        return 26;             // Неверно, поскольку возвращаемое значение не является ссылкой на переменную
    }

    // Обратите внимание: значение, которое не относится к ссылке, всё равно присваивается
    $result2 = &test2();
    var_dump($result2);

PHP не требует объявлять переменные, хотя рекомендует. Доступ к неопределённой переменной до PHP 8.0.0 выдавал уведомление `E_NOTICE`, а в новых версиях языка выдаёт предупреждение `E_WARNING`. Неопределённая переменная по умолчанию содержит значение `null`. Языковая конструкция isset() помогает определить, инициализировали ли переменную; конструкция считает переменную инициализированной, если значение переменной не равняется `null`.

Пример #4 Значение по умолчанию в неинициализированной переменной

    <?php

    // Пример переменной, которую не установили и (!) не упомянули в строковом,
    // логическом, целочисленном или другом контексте
    var_dump($unset_var);

Результат выполнения приведённого примера:

    Warning: Undefined variable $unset_var in ...
    NULL

PHP разрешает автовивификацию массивов из неопределённых переменных. Автовивификация (букв.: автоматическое оживление) — операция, при которой новый массив создаётся автоматически при добавлении в него значения. Добавление элемента к неопределенной переменной создаст новый массив и не вызовет предупреждения.

Пример #5 Автовивификация массива из неопределённой переменной

    <?php

    $unset_array[] = 'value'; // Предупреждение не выдаётся
    var_dump($unset_array);

Внимание

Нельзя рассчитывать, что неинициализированная переменная сохранит значение по умолчанию при включении одного файла в другой, поскольку появляется риск того, что неинициализированная переменная получит значение переменной другого файла, если в файлах встретятся переменные с одинаковым названием.

Переменную уничтожают языковой конструкцией unset().

Подробнее о функциях работы с переменными рассказывает раздел «Функции обработки переменных».

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open