Переменные в 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;
echo $foo; // ...меняет и значение переменной $foo
?>
Важно отметить, что по ссылке присваиваются только переменные.
<?php
$foo = 25;
$bar = &$foo; // Это верное присваивание
$bar = &(24 * 7); // Неверно; ссылка на неименованное выражение
function test()
{
return 25;
}
$bar = &test(); // Неверно, потому что функция test() не возвращает переменную по ссылке
?>
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'; // Предупреждение не выдаётся
?>
Нельзя рассчитывать, что неинициализированная переменная сохранит значение по умолчанию при включении одного файла в другой, поскольку появляется риск того, что неинициализированная переменная получит значение переменной другого файла, если в файлах встретятся переменные с одинаковым названием.
Переменную уничтожают языковой конструкцией unset().
Подробнее о функциях работы с переменными рассказывает раздел «Функции обработки переменных».