Основы
Переменные в 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 = 'ещё нет'; // Неверно; имя переменной начинается с цифры
$_4site = 'ещё нет'; // Верно; имя переменной начинается с символа подчёркивания
$täyte = 'mansikka'; // Верно; символ 'ä' — 228-я кодовая точка в кодировке Extended ASCII
?>
PHP принимает последовательность произвольных байтов как названия переменной.
Названия переменных, которые не соответствуют правилам именования,
доступны только динамически во время выполнения.
Раздел «Переменные переменных»
рассказывает, как получить доступ к переменным переменных.
Пример #2 Доступ к неизвестным именам переменных
<?php
${'invalid-name'} = 'bar';
$name = 'invalid-name';
echo ${'invalid-name'}, " ", $$name;
?>
Результат выполнения приведённого примера:
По умолчанию переменные присваиваются по значению. Поэтому
когда переменной присваивают выражение, значение
исходного выражения копируется в целевую переменную. Это
означает, например, что после присваивания значения одной переменной
другой переменной, изменение одной переменной не повлияет
на другую. Дополнительную информацию об этом способе присваивания
смотрите в разделе «Выражения».
PHP также предлагает другой способ присваивания значений переменным:
присваивание по ссылке.
Это означает, что новая переменная просто ссылается (иначе говоря,
«становится псевдонимом» или «указывает») на оригинальную
переменную. Изменения в новой переменной отражаются на оригинале,
и наоборот.
Для присваивания по ссылке к началу имени присваиваемой (исходной) переменной
просто добавляют амперсанд &. Например,
следующий фрагмент кода дважды выводит «Меня зовут Боб
»:
Важно отметить, что по ссылке присваиваются только переменные.
PHP не требует объявлять переменные, хотя рекомендует.
Доступ к неопределённой переменной до PHP 8.0.0 выдавал
уведомление E_NOTICE
, а в новых версиях языка
выдаёт предупреждение E_WARNING
.
Неопределённая переменная по умолчанию содержит значение null
.
Языковая конструкция isset() помогает определить,
инициализировали ли переменную; конструкция считает переменную инициализированной,
если значение переменной не равняется null
.
Пример #3 Значение по умолчанию в неинициализированной переменной
<?php
// Пример переменной, которую не установили и (!) не упомянули в строковом,
// логическом, целочисленном или другом контексте
var_dump($unset_var);
?>
Результат выполнения приведённого примера:
Warning: Undefined variable $unset_var in ...
NULL
PHP разрешает автовивификацию массивов из неопределённых переменных.
Автовивификация (букв.: автоматическое оживление) — операция, при которой
новый массив создаётся автоматически при добавлении в него значения.
Добавление элемента к неопределенной переменной создаст новый массив
и не вызовет предупреждения.
Пример #4 Автовивификация массива из неопределённой переменной
<?php
$unset_array[] = 'value'; // Предупреждение не выдаётся
?>
Внимание
Нельзя рассчитывать, что неинициализированная переменная сохранит значение по умолчанию
при включении одного файла в другой, поскольку появляется риск того, что неинициализированная переменная
получит значение переменной другого файла, если в файлах встретятся переменные с одинаковым названием.
Переменную уничтожают языковой конструкцией unset().
Подробнее о функциях работы с переменными рассказывает раздел
«Функции обработки переменных».