Глиф Учебники

Урок 2. Переменные, типы и строки

Курс «PHP» · урок 2 из 10 · 3 минуты чтения

Переменная — это имя, под которым программа хранит значение: число, текст, список. В PHP имя переменной всегда начинается со знака $. Программы этого урока запускайте в терминале: php имя_файла.php.

Переменные

PHP
<?php
$name = "Анна";
$age = 20;
echo "Имя: " . $name . "\n";
echo "Возраст: " . $age . "\n";
$age = $age + 1;
echo "Через год: " . $age . "\n";
Вывод
Имя: Анна
Возраст: 20
Через год: 21

Знак = кладёт значение в переменную; новое значение заменяет старое. Объявлять переменную заранее не нужно: она появляется при первом присваивании.

$name = "Анна"; $age = 20; $name "Анна" тип string $age 20 тип int $age = $age + 1; $age 20 старое значение + 1 $age 21 новое значение
Переменная хранит значение под именем: $name — строку "Анна", $age — число 20, а после $age = $age + 1 в $age лежит новое значение 21 вместо старого.

Правила имён:

Типы данных

PHP сам определяет тип по значению. Основные типы:

ТипЧто хранитПример
intцелое число42, -7
floatдробное число3.14, 1.5e3
stringстрока, текст"Минск", 'текст'
boolлогическое значениеtrue, false
null«ничего», значения нетnull
arrayмассив, список значений[1, 2, 3] — урок 4

Тип и значение показывает функция var_dump — главный инструмент отладки:

PHP
<?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, где латинская буква занимает один байт, а русская — два. Об этом ещё пойдёт речь ниже.

var_dump("кот"); → string(6) "кот" буквы байты к о т 1 2 3 4 5 6 mb_strlen("кот") 3 strlen("кот") 6 В UTF-8 русская буква занимает 2 байта, латинская — 1 байт.
В слове «кот» три буквы, но шесть байтов: каждая русская буква в UTF-8 занимает два байта, поэтому var_dump и strlen показывают 6, а mb_strlen — 3.

Арифметика

PHP
<?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
<?php
$city = "Минск";
$prefix = "кило";
echo "Город: $city\n";
echo 'Город: $city\n';
echo "\n";
echo "1 {$prefix}метр = 1000 метров\n";
Вывод
Город: Минск
Город: $city\n
1 километр = 1000 метров

Скобки особенно нужны перед русскими буквами: PHP считает их допустимыми в имени, и "$prefixметр" он прочитал бы как переменную $prefixметр, которой нет.

Двойные кавычки переменные и \n работают echo "Город: $city\n"; Город: Минск + новая строка Одинарные кавычки всё как написано echo 'Город: $city\n'; Город: $city\n Где кончается имя переменной "{$prefix}метр" километр "$prefixметр" PHP ищет переменную $prefixметр — её нет
В двойных кавычках $city заменяется на «Минск», а \n — на перевод строки, в одинарных всё выводится как написано; фигурные скобки отделяют имя $prefix от букв «метр».

Строки склеивают точкой, а .= дописывает в конец:

PHP
<?php
$greeting = "Привет";
$greeting .= ", " . "мир";
echo $greeting . "!\n";
Вывод
Привет, мир!

Функции для строк

PHP
<?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
<?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
<?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
<?php
// Комментарий до конца строки
# Тоже комментарий
/* Комментарий
   на несколько строк */
const SITE = "glif.by";
define('YEAR', 2025);
echo SITE . ", " . YEAR . "\n";
Вывод
glif.by, 2025

Встроенные константы тоже пригодятся: PHP_VERSION — версия PHP, PHP_EOL — перевод строки той системы, где работает программа.

Частые ошибки

Коротко

Проверьте себя

1. Что выведет программа?
PHP
<?php
$n = 3;
echo 'n = $n';
2. Что покажет var_dump("кот");?
3. Каким знаком склеивают строки в PHP?
4. Чем отличаются $total и $Total?