Переменные
Чему вы научитесь:
- заводить переменные и менять их значение;
- объяснять, почему изменение
$aпосле$b = $aне меняет$b; - узнавать тип значения через
var_dumpи предсказывать, что напечатаетecho; - преобразовывать значения из одного типа в другой и объявлять константы.

Представьте банку с этикеткой. На этикетке написано имя, а внутри лежит значение. По имени банку можно найти, заглянуть в неё или положить туда что-то другое. Программа хранит данные так же — в переменных: именованных значениях, которые можно прочитать и изменить.
Одну переменную вы уже встречали в первой теме: параметр $x функции double. Теперь заведём переменные сами. Переменная позволяет запомнить значение один раз и потом пользоваться им по имени:
<?php
$name = 'Anna';
$age = 30;
echo $name, ' ', $age, "\n"; // Anna 30
$age = $age + 1;
echo $name, ' ', $age, "\n"; // Anna 31Давайте разберём по строкам:
$name = 'Anna';заводит банку$nameи кладёт в неё строку'Anna'.$age = 30;заводит вторую банку, с числом30.echoпечатает содержимое обеих банок:Anna 30.$age = $age + 1;читает из$ageчисло30, прибавляет1и кладёт результат31обратно в ту же банку.- Второй
echoпечатаетAnna 31: в$nameничего не менялось.
Объявлять переменную заранее не нужно. Она появляется, когда вы впервые кладёте в неё значение.
Имя переменной
Имя переменной в PHP всегда начинается со знака $. Этот знак — часть имени: для PHP $age и age — разные вещи, и переменной без $ не бывает.
Правила для остальной части имени:
- первый символ после
$— буква или подчёркивание, но не цифра; - дальше идут буквы, цифры и подчёркивания;
- регистр важен:
$ageи$Age— две разные переменные.
$Age = 40;
echo $age, ' ', $Age, "\n"; // 31 40Здесь $Age — новая переменная, а в $age по-прежнему лежит 31. Составные имена в курсе пишем слитно, начиная каждое следующее слово с заглавной буквы: $userName, $itemCount. Так принято в большинстве PHP-проектов.
Присваивание
Знак = — это присваивание: PHP вычисляет то, что справа, и кладёт результат в переменную слева. Это не равенство из математики. Запись $age = $age + 1 читается так: «положи в $age то, что в ней было, плюс один».
Новое присваивание заменяет старое значение. Прежнее при этом пропадает: в банке всегда лежит что-то одно.
Здесь аналогия с банкой неточна. Если вынуть из настоящей банки варенье, она опустеет. А прочитать переменную — значит посмотреть на значение, а не забрать его: после echo $age в $age лежит то же число.
Копия при присваивании
А что делает строка $b = $a? Она не клеит на банку $a вторую этикетку. PHP берёт копию содержимого $a и кладёт её в отдельную банку $b. С этого момента у каждой переменной своё значение: изменение $a не меняет $b.
Давайте проверим это на программе. Нажмите «Следующий шаг» и следите за $b и $greeting в рамке {main}: после присваивания они больше не меняются.
1<?php2 3$a = 5;4$b = $a;5$a = $a + 1;6$name = 'Anna';7$greeting = $name;8$name = 'Olga';9echo $a, ' ', $b, "\n";10echo $greeting, "\n";
В банку $a кладут число 5.
Обе пары переменных ведут себя одинаково:
$b = $aкопирует число5, и после$a = $a + 1в$bпо-прежнему5.$greeting = $nameкопирует строку'Anna', и новое значение$nameдо$greetingне доходит.- Поэтому программа печатает
6 5иAnna.
Этот вопрос часто задают на собеседовании: «Что окажется в $b после $b = $a и изменения $a?» Ответ: то значение, которое было в $a в момент присваивания. Присваивание копирует значение, а не связывает две переменные.
Частая ошибка
Имя переменной написали с опечаткой:
$total = 10;
echo $totl, "\n"; // ✗Warning: Undefined variable $totlПеременной $totl никто ничего не присваивал, и PHP об этом предупреждает. Но скрипт не останавливается: на месте значения не печатается ничего, а строки ниже выполняются дальше. Поэтому читайте предупреждения, даже если программа отработала до конца. Чтобы исправить, напишите то же имя, что при присваивании: echo $total, "\n";.
Главное
- Переменная — именованное значение; её имя начинается с
$, и регистр в имени важен. =кладёт значение справа в переменную слева;$age = $age + 1записывает новое значение в ту же переменную.$b = $aкопирует значение в момент присваивания: позднее изменение$aне меняет$b.- Если прочитать переменную, которой ничего не присваивали, PHP выдаёт
Warning: Undefined variable, но скрипт работает дальше.