Основы PHP 8: Синтаксис, переменные и управляющие конструкции
Студент изучит базовый синтаксис PHP 8, работу с переменными, типами данных и управляющими конструкциями, включая новое выражение match.
Введение в PHP 8 и веб-разработку
Разработка современного интернет-магазина требует надежной серверной инфраструктуры. Язык PHP версии 8 предоставляет строгую типизацию и высокую производительность. В рамках методологии Direct Instruction мы начнем с абсолютных основ, постепенно выстраивая ваш фундамент знаний. PHP (PHP: Hypertext Preprocessor) — это скриптовый язык программирования общего назначения, который особенно активно применяется для веб-разработки. Главная особенность PHP заключается в том, что код выполняется на стороне сервера (backend), а клиент (браузер пользователя) получает лишь готовый HTML-результат. Это обеспечивает безопасность бизнес-логики, такой как расчет скидок или обработка платежей в нашем будущем интернет-магазине.
В PHP 8 были введены значительные улучшения синтаксиса, которые делают код более читаемым и безопасным. Мы будем использовать архитектуру MVC (Model-View-Controller) в будущем, но сейчас наша цель — освоить базовые строительные блоки языка: переменные, типы данных и управляющие конструкции. Каждая переменная в PHP начинается со знака доллара $. В отличие от старых версий, PHP 8 поощряет использование строгой типизации, что позволяет избежать множества скрытых ошибок на этапе оформления заказа.
Переменные, типы данных и строгая типизация
В интернет-магазине мы постоянно работаем с данными: цена товара (число с плавающей точкой - float), название категории (строка - string), наличие на складе (логический тип - bool), идентификатор пользователя (целое число - int). PHP является языком с динамической типизацией, но начиная с PHP 7 и особенно в PHP 8, разработчикам настоятельно рекомендуется использовать объявления типов. Это часть концепции Scaffolding: мы сразу учимся писать безопасный код, чтобы в будущем не тратить часы на отладку. Чтобы включить строгую типизацию в файле, необходимо использовать конструкцию declare(strict_types=1); в самом начале скрипта. Если вы попытаетесь передать строку туда, где ожидается число, PHP 8 выбросит фатальную ошибку (TypeError), предотвращая сохранение некорректных данных в базу.
Типичная ошибка новичков — путать операторы присваивания (=) и сравнения (== или ===). При проверке статуса заказа всегда используйте строгое сравнение (===), которое проверяет не только значение, но и тип данных. Например, 0 === false вернет false, тогда как 0 == false вернет true, что может привести к логической уязвимости в модуле оплаты.
<?php
declare(strict_types=1);
// Базовые типы данных для интернет-магазина
$productId = 105; // int
$productName = "Laptop Pro"; // string
$price = 1299.99; // float
$inStock = true; // bool
// Использование переменных в строках (интерполяция)
echo "Товар: $productName, Цена: $price USD";
// Проверка типов (строгое сравнение)
$quantity = 0;
if ($quantity === 0) {
echo "Товар закончился на складе.";
}
Управляющие конструкции: Эволюция от switch к match
Управляющие конструкции позволяют изменять ход выполнения программы в зависимости от условий. Вы уже знакомы с if-else, но при разработке e-commerce систем часто возникает необходимость проверять одно значение на множество вариантов. Например, обработка статуса заказа: 1 - 'Новый', 2 - 'Оплачен', 3 - 'Доставлен'. Традиционно для этого использовался оператор switch. Однако в PHP 8 появилось мощное выражение match. В отличие от switch, выражение match возвращает значение, использует строгое сравнение (===) и не требует использования оператора break (что исключает частую ошибку "проваливания" case). Кроме того, если match не находит совпадения и блок default отсутствует, он выбрасывает исключение UnhandledMatchError. Это идеальный инструмент для написания надежного кода нашего интернет-магазина.
В архивных материалах курса приводится пример функции getStatusName. Мы применим метод Chunking, разобрав эту конструкцию как единый смысловой блок обработки статусов. Понимание этой конструкции критически важно для интеграции с платежными шлюзами, где статус транзакции определяет дальнейшие действия системы.
<?php
// Пример из архивных материалов: использование match (PHP 8)
function getStatusName(int $statusCode): string {
return match($statusCode) {
1 => 'Новый',
2 => 'Оплачен',
3 => 'Доставлен',
default => throw new InvalidArgumentException('Неизвестный статус: ' . $statusCode),
};
}
$currentStatus = 2;
echo "Текущий статус заказа: " . getStatusName($currentStatus); // Выведет: Оплачен
В чем главное отличие выражения match (PHP 8) от классического оператора switch?
Какой символ используется в PHP для объявления переменной?
Задание
Сценарий: Вы разрабатываете логику отображения скидки для пользователя в зависимости от его группы (1 - Обычный, 2 - VIP, 3 - Оптовик).
- Определите переменную $userGroup со значением 2.
- Напишите выражение match, которое принимает $userGroup.
- Для 1 верните '0%', для 2 верните '10%', для 3 верните '20%'.
- Для default выбросьте исключение Exception.