Урок 2. Переменные, типы и строки
Переменная — это имя, под которым программа хранит значение: число, текст, список. В PHP имя переменной всегда начинается со знака $. Программы этого урока запускайте в терминале: php имя_файла.php.
Переменные
<?php
$name = "Анна";
$age = 20;
echo "Имя: " . $name . "\n";
echo "Возраст: " . $age . "\n";
$age = $age + 1;
echo "Через год: " . $age . "\n";Имя: Анна
Возраст: 20
Через год: 21Знак = кладёт значение в переменную; новое значение заменяет старое. Объявлять переменную заранее не нужно: она появляется при первом присваивании.
Правила имён:
- после
$идёт буква или_, дальше буквы, цифры и_:$userName,$total_sum,$item2; - регистр важен:
$ageи$Age— разные переменные; - имена пишут латиницей и по смыслу:
$price, а не$a1.
Типы данных
PHP сам определяет тип по значению. Основные типы:
| Тип | Что хранит | Пример |
|---|---|---|
int | целое число | 42, -7 |
float | дробное число | 3.14, 1.5e3 |
string | строка, текст | "Минск", 'текст' |
bool | логическое значение | true, false |
null | «ничего», значения нет | null |
array | массив, список значений | [1, 2, 3] — урок 4 |
Тип и значение показывает функция var_dump — главный инструмент отладки:
<?php
var_dump(42);
var_dump(3.14);
var_dump("кот");
var_dump(true);
var_dump(null);
var_dump(10 / 4);int(42)
float(3.14)
string(6) "кот"
bool(true)
NULL
float(2.5)Почему у слова «кот» длина 6? В скобках у строки — число байтов, а не букв. Текст хранится в кодировке UTF-8, где латинская буква занимает один байт, а русская — два. Об этом ещё пойдёт речь ниже.
Арифметика
<?php
$a = 7;
$b = 2;
echo $a + $b, "\n";
echo $a - $b, "\n";
echo $a * $b, "\n";
echo $a / $b, "\n";
echo $a % $b, "\n";
echo $a ** $b, "\n";
echo intdiv($a, $b), "\n";9
5
14
3.5
1
49
3% — остаток от деления, ** — возведение в степень, intdiv — деление нацело. echo принимает несколько значений через запятую и выводит их подряд.
Короткие записи: $a += 5 — то же, что $a = $a + 5; $i++ увеличивает на единицу, $i-- уменьшает.
Строки и кавычки
Строку пишут в двойных или одинарных кавычках, и разница важна:
<?php
$city = "Минск";
$prefix = "кило";
echo "Город: $city\n";
echo 'Город: $city\n';
echo "\n";
echo "1 {$prefix}метр = 1000 метров\n";Город: Минск
Город: $city\n
1 километр = 1000 метров- В двойных кавычках PHP подставляет значения переменных и понимает спецсимволы:
\n— перевод строки,\t— табуляция,\"— кавычка,\$— знак доллара. - В одинарных — всё выводится как написано. Внутри работают только
\'и\\. - Фигурные скобки
{$prefix}показывают, где кончается имя переменной.
Скобки особенно нужны перед русскими буквами: PHP считает их допустимыми в имени, и "$prefixметр" он прочитал бы как переменную $prefixметр, которой нет.
Строки склеивают точкой, а .= дописывает в конец:
<?php
$greeting = "Привет";
$greeting .= ", " . "мир";
echo $greeting . "!\n";Привет, мир!Функции для строк
<?php
$text = " Привет, мир ";
$clean = trim($text);
echo "[" . $clean . "]\n";
echo mb_strlen($clean) . "\n";
echo strlen($clean) . "\n";
echo mb_strtoupper($clean) . "\n";
echo str_replace("мир", "PHP", $clean) . "\n";
var_dump(str_contains($clean, "мир"));[Привет, мир]
11
20
ПРИВЕТ, МИР
Привет, PHP
bool(true)trim убирает пробелы по краям, str_replace заменяет часть строки, str_contains проверяет, есть ли в строке кусок текста. strlen считает байты (20), mb_strlen — буквы (11). Для русского текста берите функции с приставкой mb_: mb_strlen, mb_substr, mb_strtoupper. Обычные strtoupper и ucfirst русские буквы не меняют. Функциям mb_ нужно расширение mbstring — как его включить, сказано в уроке 1.
Преобразование типов
PHP сам приводит типы, когда это нужно, а явно тип задают записью в скобках:
<?php
var_dump("5" + 3);
var_dump("5" . 3);
var_dump((int) "42");
var_dump((float) "3.5");
var_dump((string) 10);int(8)
string(2) "53"
int(42)
float(3.5)
string(2) "10"+ превращает строку в число, . — число в строку. Сложение с текстом, в котором нет числа ("кот" + 1), в PHP 8 вызывает ошибку TypeError.
Красивый вывод чисел
<?php
$price = 1234567.891;
echo number_format($price, 2, ',', ' ') . "\n";
printf("%.1f%%\n", 45.678);1 234 567,89
45.7%number_format округляет и расставляет разделители: два знака после запятой, запятая вместо точки, пробел между тысячами. printf выводит по шаблону: %.1f — число с одним знаком после точки, %% — сам знак процента.
Константы и комментарии
Константа — значение, которое не меняется. У неё нет $, имя по обычаю пишут заглавными:
<?php
// Комментарий до конца строки
# Тоже комментарий
/* Комментарий
на несколько строк */
const SITE = "glif.by";
define('YEAR', 2025);
echo SITE . ", " . YEAR . "\n";glif.by, 2025Встроенные константы тоже пригодятся: PHP_VERSION — версия PHP, PHP_EOL — перевод строки той системы, где работает программа.
Частые ошибки
Warning: Undefined variable $nmae— опечатка в имени или другой регистр:$name,$nmaeи$Name— три разные переменные. Подробнее — справка Undefined variable.- Вместо значения выводится само имя
$city— строка в одинарных кавычках. Переменные подставляются только в двойных. - Строки склеены знаком
+: PHP складывает их как числа, и"кот" + 1даёт ошибкуTypeError. Склеивают точкой. strlenу русского слова показывает вдвое больше букв — она считает байты. Буквы считаетmb_strlen.
Коротко
- Переменная начинается с
$, регистр в имени важен, тип PHP определяет сам. - Типы:
int,float,string,bool,null,array; тип и значение показываетvar_dump. - В двойных кавычках переменные подставляются, в одинарных — нет;
{$имя}отделяет имя от текста. - Строки склеивают точкой
., дописывают —.=. - Для русского текста — функции
mb_:strlenсчитает байты,mb_strlen— буквы. - Константы —
constилиdefine, без$.