1. Основы PHP 8.0 и современные возможности языка
Основы PHP 8.0 и современные возможности языка
Роль PHP 8.0 в современной веб-разработке
PHP — серверный язык программирования, который чаще всего используют для создания веб-приложений и API. Код PHP исполняется на сервере, а клиент (браузер или мобильное приложение) получает уже готовый результат: HTML, JSON и т.д.
PHP 8.0 — крупный релиз, который усилил типизацию, добавил новые конструкции языка и улучшил производительность (в том числе за счёт JIT). В этом курсе мы будем писать код так, как принято в современной PHP-разработке: с понятной структурой, типами, предсказуемым поведением и ясной обработкой ошибок.
!Схема показывает, где именно исполняется PHP-код и как запрос проходит через инфраструктуру
Запуск PHP и базовая структура программы
Способы запуска
* Через веб-сервер (типичный продакшен): Nginx/Apache + PHP-FPM.
* Через встроенный сервер для разработки: php -S localhost:8000 -t public.
* Через CLI (консольные скрипты): php script.php.
Официальная документация по CLI:
Минимальный пример
Ключевые элементы:
* <?php — начало PHP-кода.
* declare(strict_types=1); — включает строгую проверку типов для аргументов и возвращаемых значений в текущем файле.
* echo — вывод строки.
Документация:
* declare
Переменные, типы и строгая типизация
Переменные и базовые типы
Переменные в PHP начинаются с a, int a + userId): ?string {
// Если не найдено — возвращаем null
return null;
}
php
config['limit'] ?? 100;
php
user?->getProfile()?->getEmail();
Документация:
Стрелочные функции
Стрелочные функции (fn) удобны для коротких колбэков и автоматически захватывают переменные из внешней области видимости по значению.
Документация:
* match
Ошибки и исключения
Ошибки vs исключения
В современном PHP-коде предпочтительно обрабатывать проблемные ситуации через исключения.
Promotion свойств конструктора (PHP 8.0)
PHP 8.0 позволяет объявлять и инициализировать свойства прямо в параметрах конструктора.
Документация:
Composer и PSR-4 (почему это важно)
В реальных проектах автозагрузка классов обычно настраивается через Composer и стандарт PSR-4. Это позволяет не писать вручную require/include для каждого файла.
Документация:
* Composer
Система типов PHP 8.0: union types и mixed
Union types (PHP 8.0)
Если функция может принимать несколько разных типов, можно указать объединение через |.
Это лучше, чем оставлять тип неуказанным, потому что контракт становится явным.
Документация:
mixed
mixed означает «может быть что угодно». Это крайний случай: он полезен на границе системы (например, входные данные), но внутри доменной логики лучше стремиться к конкретным типам.
Документация:
* mixed
Атрибуты (PHP 8.0)
Атрибуты — встроенный способ добавлять метаданные к классам, методам, свойствам, параметрам. Это замена части сценариев, где раньше использовали docblock-аннотации.
Пример: пометим метод как устаревший (демонстрация идеи).
Атрибуты читаются через Reflection (к этому мы подойдём позже в курсе, когда будем разбирать метапрограммирование и инструменты фреймворков).
Документация:
Производительность и JIT
PHP 8.0 включает JIT (Just-In-Time compiler) как часть движка OPcache. Важно понимать практический вывод:
* JIT не всегда ускоряет типичные веб-запросы так сильно, как вычислительные задачи. * Главные выигрыши в вебе часто дают архитектура, кэширование, оптимизация запросов в БД и снижение I/O.
Тем не менее, сам факт появления JIT — показатель движения PHP в сторону более высокой производительности.
Документация:
* OPcache
Рекомендуемый стиль кода и минимальные правила качества
Чтобы код был поддерживаемым, с первого занятия закрепим базовые правила:
* Включайте declare(strict_types=1); в файлах с бизнес-логикой.
* Всегда указывайте типы аргументов и возвращаемых значений, где это разумно.
* Избегайте «магических» значений: используйте константы, enum (появится в PHP 8.1) или отдельные типы.
* Предпочитайте исключения молчаливым ошибкам.
* Разделяйте ответственность: функции и классы должны делать одну понятную вещь.
Итоги
В этой статье вы:
* разобрали, как запускается PHP и зачем нужен strict_types
* закрепили базовые типы и работу с null
* познакомились с ключевыми возможностями PHP 8.0: match, именованные аргументы, union types, nullsafe operator, promotion свойств конструктора, атрибуты, throw` как выражение
* увидели основу ООП, namespaces и роль Composer
В следующих материалах курса мы будем углублять эти основы: детально разберём массивы и строки, работу с датой/временем, I/O, затем перейдём к архитектуре приложений, тестированию и практикам промышленной разработки на PHP 8.