Основы
Переменные в PHP представлены знаком доллара с последующим
именем переменной. Имя переменной чувствительно к регистру.
Имена переменных соответствуют тем же правилам, что и
остальные наименования в PHP. Правильное имя переменной должно
начинаться с буквы или символа подчёркивания и состоять из
букв, цифр и символов подчёркивания в любом количестве.
Это можно отобразить регулярным выражением:
^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Замечание:
Под буквами здесь подразумеваются символы a-z, A-Z и байты от
128 до 255 (0x80-0xff
).
Замечание:
$this
— это специальная переменная, которой
нельзя ничего присваивать.
До PHP 7.1.0 было возможно косвенное присвоение (например, с использованием
переменных переменных).
Для информации о функциях работы с переменными обращайтесь
к разделу
функций работы с переменными.
По умолчанию переменные всегда присваиваются по значению. То есть,
когда вы присваиваете выражение переменной, все значение
оригинального выражения копируется в эту переменную. Это
означает, к примеру, что после того как одной переменной присвоено
значение другой, изменение одной из них не влияет на
другую. Дополнительную информацию об этом способе присвоения
смотрите в разделе Выражения.
PHP также предлагает иной способ присвоения значений переменным:
присвоение по ссылке.
Это означает, что новая переменная просто ссылается (иначе говоря,
"становится псевдонимом" или "указывает") на оригинальную
переменную. Изменения в новой переменной отражаются на оригинале,
и наоборот.
Для присвоения по ссылке, просто добавьте амперсанд (&) к
началу имени присваиваемой (исходной) переменной. Например,
следующий фрагмент кода дважды выводит 'Меня зовут Боб
':
Важно отметить, что по ссылке могут быть присвоены только
именованные переменные.
Хорошей практикой считается инициализировать переменные, хотя в PHP
это и не обязательное требование. Неинициализированные переменные
принимают значение по умолчанию в зависимости от их типа, который
определяется из контекста их первого использования: логические переменные
принимают значение false
, целые числа и числа с плавающей точкой —
ноль, строки (например, при вызове с конструкцией echo) —
пустую строку, а массивы становятся пустыми массивами.
Пример #1 Значения по умолчанию в неинициализированных переменных
<?php
// Неустановленная И не имеющая ссылок (то есть без контекста использования) переменная; выведет NULL
var_dump($unset_var);
// Использование логической переменной; выведет 'false' (Подробнее по этому синтаксису смотрите раздел о тернарном операторе)
echo $unset_bool ? "true\n" : "false\n";
// Строковое использование; выведет 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);
// Целочисленное использование; выведет 'int(25)'
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);
// Использование в качестве числа с плавающей точкой (float); выведет 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);
// Использование в качестве массива; выведет array(1) { [3]=> string(3) "def" }
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);
// Использование в качестве объекта; создаёт новый объект stdClass (смотрите http://www.php.net/manual/ru/reserved.classes.php)
// Выведет: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>
Полагаться на значения по умолчанию неинициализированных переменных
довольно проблематично при включении файла в другой файл,
использующий переменную с таким же именем.
В случае работы с неинициализированной переменной вызывается ошибка уровня
E_WARNING
(до PHP 8.0.0 выбрасывалась ошибка уровня E_NOTICE
),
за исключением случая добавления элементов в неинициализированный массив.
Для обнаружения инициализации переменной может быть использована
языковая конструкция isset().