Углубленный курс PHP 8.0: от новичка до уверенного разработчика

Этот курс охватывает все ключевые аспекты программирования на PHP, который используется более чем на 80% сайтов [proglib.io](https://proglib.io/p/top-52-kursa-php-razrabotchikov-vklyuchaya-besplatnoe-onlayn-obuchenie-programmirovaniyu-na-php-s-nulya-2024-11-26). Вы пройдете путь от базового синтаксиса до продвинутого ООП и на практике освоите главные нововведения PHP 8.0, такие как JIT-компиляция, атрибуты, union types и выражение match [php.net](https://www.php.net/releases/8.0/ru.php).

1. Введение в PHP 8.0: базовый синтаксис, типы данных и управляющие конструкции

Введение в PHP 8.0: базовый синтаксис, типы данных и эволюция логики

Более 70% всех веб-сайтов в интернете работают на PHP. От небольших блогов до гигантских корпоративных порталов — этот язык программирования прошел огромный путь эволюции. С выходом версии 8.0 язык получил мощный компилятор Just-In-Time (JIT), строгую типизацию и новые синтаксические конструкции, которые сделали код чище и безопаснее.

> PHP — это инструмент для решения реальных задач, а не просто красивая академическая концепция. > > Расмус Лердорф

Анатомия скрипта и базовые правила

Любая программа начинается с того, как сервер понимает, где находится исполняемый код, а где — обычный текст. Интерпретатор ищет специальный открывающий тег. Все, что находится внутри, воспринимается как инструкции для сервера.

Каждая переменная в языке начинается с символа доллара. Это историческая особенность, которая позволяет парсеру мгновенно отличать переменные от функций или констант. Инструкции обязательно завершаются точкой с запятой.

В этом примере сервер выделяет память под три переменные, производит математическую операцию и выводит результат. Если базовая цена составляет 50 000 руб., а налог равен 20%, итоговая стоимость для покупателя составит 60 000 руб.

Система типов и строгая типизация

Исторически язык использовал динамическую типизацию. Это означало, что переменная могла сначала хранить число, а через строку кода — текст. В современных backend-приложениях такой подход часто приводит к скрытым ошибкам.

Версия 8.0 делает огромный шаг в сторону безопасности данных. Теперь разработчики могут жестко контролировать, какая информация передается в систему.

Основные скалярные типы данных: * Целые числа: для подсчета количества товаров, ID пользователей. * Числа с плавающей точкой: для цен, веса, точных измерений. * Строки: для имен, адресов, текстового контента. * Логический тип: принимает только истину или ложь.

Для наглядности рассмотрим характеристики базовых типов в таблице.

| Название типа | Ключевое слово | Пример значения | Описание и применение | | --- | --- | --- | --- | | Целое число | int | 1024 | Используется для счетчиков, идентификаторов в базе данных. | | Дробное число | float | 99.99 | Применяется для финансовых расчетов, координат, процентов. | | Строка | string | "Иван Иванов" | Хранит любой текстовый контент, включая HTML-разметку. | | Логический | bool | true | Управляет переключателями, статусами (активен/заблокирован). |

Объединенные типы (Union Types)

До версии 8.0, если функция могла принимать либо число, либо дробь, разработчикам приходилось опускать указание типа или писать длинные комментарии. Теперь появились Union Types — возможность указать несколько допустимых вариантов через вертикальную черту.

Здесь функция четко заявляет: она готова работать и с целыми числами, и с дробями, но категорически откажется принимать текст.

Управляющие конструкции: ветвления и логика

Программа без условий линейна и предсказуема. Управляющие конструкции позволяют скрипту принимать решения на основе входящих данных.

Классический оператор ветвления проверяет истинность выражения. Если условие выполняется, запускается один блок кода, если нет — другой.

Для расчета сложных условий часто применяются математические формулы. Рассмотрим расчет стоимости доставки с учетом габаритов.

Где — итоговая стоимость доставки, — вес посылки в килограммах, — объем в кубических метрах. При весе 5 кг и объеме 0.1 куб. м. стоимость составит: руб.

В коде это решение можно обернуть в условие: если стоимость превышает определенный порог, применяется скидка.

Эволюция выбора: выражение match

Долгие годы для проверки одной переменной на множество значений использовалась конструкция switch. Она была громоздкой и таила в себе опасность: из-за нестрогого сравнения число 0 могло приравняться к пустой строке.

В PHP 8.0 появилось выражение match. Оно работает как швейцарские часы: требует строгого совпадения типов, возвращает значение и занимает в три раза меньше места.

В отличие от устаревшего предшественника, match не требует постоянного написания команды прерывания. Как только найдено совпадение, поиск останавливается, а результат записывается в переменную.

Циклы и обработка массивов данных

Когда интернет-магазин выводит список товаров в корзине, он не пишет отдельный код для каждого продукта. Вместо этого используется цикл — конструкция, повторяющая действие заданное количество раз.

Самый популярный инструмент для работы с наборами данных — цикл перебора элементов. Он берет массив (список значений) и проходит по каждому его элементу от начала до конца.

В данном примере скрипт автоматически определяет количество элементов в корзине. Если пользователь добавит еще десять позиций, логику программы менять не придется — цикл самостоятельно обработает новые данные и выдаст корректную сумму в 69 500 руб.

Итоги

* Скрипты всегда начинаются со специального тега, а все переменные обозначаются символом доллара, что ускоряет работу интерпретатора. Внедрение Union Types* в версии 8.0 позволило указывать несколько допустимых типов данных для одной переменной, повысив надежность кода. Новое выражение match* полностью заменяет устаревшие конструкции множественного выбора, обеспечивая строгое сравнение и компактный синтаксис. * Циклы позволяют автоматизировать обработку любого объема данных без дублирования инструкций.

2. Работа с данными: массивы, функции и обработка HTTP-запросов

Работа с данными: массивы, функции и обработка HTTP-запросов

Изучив базовый синтаксис, строгую типизацию и управляющие конструкции в предыдущей статье, мы научились создавать линейные алгоритмы и ветвления. Однако реальные веб-приложения редко оперируют одиночными переменными. Интернет-магазины обрабатывают списки из тысяч товаров, социальные сети загружают сложные профили пользователей, а серверы ежесекундно принимают потоки входящей информации от браузеров. Для управления таким объемом информации требуются специализированные структуры данных, механизмы переиспользования кода и инструменты для общения с внешним миром.

Массивы: от простых списков к сложным структурам

В большинстве классических языков программирования массив представляет собой строго типизированный список элементов фиксированной длины. В PHP массивы устроены иначе: под капотом они реализованы как упорядоченные хеш-таблицы. Это делает их универсальным инструментом, который может выступать одновременно и как обычный список, и как словарь (ассоциативный массив).

Представим корзину покупателя. Если нам нужно сохранить только названия выбранных товаров, мы используем индексированный массив, где каждому элементу автоматически присваивается числовой порядковый номер, начиная с нуля.

Но для полноценной работы интернет-магазина одних названий недостаточно. Нам нужно связать товар с его стоимостью, артикулом и количеством. Здесь на помощь приходят ассоциативные массивы, где вместо числовых индексов используются строковые ключи.

Порядок передачи больше не имеет значения. Это делает код самодокументируемым и защищает от случайной путаницы при передаче однотипных данных.

Взаимодействие с клиентом: HTTP-запросы

PHP создавался специально для веба. В отличие от языков общего назначения, он имеет встроенные механизмы для работы с сетевыми протоколами.

> Веб устроен так, чтобы любая информация могла быть связана с любой другой информацией, образуя единое глобальное пространство данных. > > Тим Бернерс-Ли

Когда пользователь вводит адрес сайта или нажимает кнопку «Купить», браузер формирует HTTP-запрос и отправляет его на сервер. Этот запрос содержит массу полезной информации: какой именно адрес запрошен, какие данные ввел пользователь в форму, какой браузер он использует.

Для доступа к этим данным в PHP существуют суперглобальные массивы — специальные переменные, которые доступны из любой точки скрипта без дополнительных объявлений.

Массив _GET.

Данные из _POST: скрытая передача данных

Для отправки конфиденциальной информации или больших объемов текста (например, при регистрации пользователя или оформлении заказа) используется метод POST. Данные передаются в теле самого HTTP-запроса, скрыто от глаз пользователя, и попадают в массив email = password = _SERVER: метаданные запроса

Помимо пользовательских данных, сервер собирает техническую информацию о самом запросе. Массив _GET применяется для открытых параметров (поиск, фильтры), а $_POST` — для скрытой и безопасной передачи данных (формы, пароли).