Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

Функции и массивы в PHP 8

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

Прогресс урока: 0%

Пользовательские функции и строгая типизация аргументов

Функции — это основа переиспользуемого кода. В контексте интернет-магазина у нас будут десятки функций: для расчета налогов, валидации email, форматирования цен. Метод Mastery Learning требует, чтобы мы не двигались дальше, пока не научимся правильно объявлять функции. В PHP 8 хорошим тоном является указание типов как для принимаемых аргументов (type hinting), так и для возвращаемого значения (return type). Это служит отличной документацией к коду и защищает от логических ошибок. Если функция должна возвращать цену со знаком доллара, её тип возвращаемого значения должен быть string. Если функция может ничего не возвращать, используется тип void. А если функция может вернуть строку ИЛИ null, используется синтаксис ?string (nullable тип).

Рассмотрим пример расчета итоговой стоимости корзины. Мы передаем в функцию массив товаров. Типизация массива в PHP ограничивается словом array (в отличие от строго типизированных языков, где можно указать массив конкретных объектов, хотя это решается через PHPDoc). В теле функции мы применяем бизнес-логику и обязательно возвращаем значение ожидаемого типа.

php
<?php
declare(strict_types=1);

// Функция с типизацией аргументов и возвращаемого значения
function calculateTotal(float $price, int $quantity, float $discount = 0.0): float {
    $total = ($price * $quantity) - $discount;
    return $total > 0 ? $total : 0.0;
}

$finalPrice = calculateTotal(150.50, 2, 20.0);
echo "Итого к оплате: $" . number_format($finalPrice, 2);

Массивы: Индексные и Ассоциативные

Массивы в PHP — это невероятно гибкая структура данных, представляющая собой упорядоченные карты (ordered maps). В проекте интернет-магазина массивы используются повсеместно: от хранения списка ID товаров в сессии пользователя (корзина) до получения результатов запросов из базы данных. Индексные массивы используют числовые ключи (по умолчанию начиная с 0). Ассоциативные массивы используют строковые ключи, что делает их похожими на словари или JSON-объекты. В архивных материалах мы видим использование сессионной корзины: $cart = session()->get('cart', []);, где корзина — это ассоциативный массив, где ключом является ID товара, а значением — другой массив с данными товара (имя, цена, количество). Это называется многомерным массивом.

Для работы с массивами PHP предлагает огромную библиотеку встроенных функций. Ключевые функции, которые нам понадобятся: array_map() (применяет функцию ко всем элементам), array_filter() (фильтрует элементы), array_sum() (вычисляет сумму значений). В упражнении 1.1 (сохранение заказа) используется комбинация этих функций: array_sum(array_map(fn($item) => $item['price'] * $item['quantity'], $cart)). Здесь также применяется стрелочная функция (arrow function fn() =>), появившаяся в PHP 7.4, которая лаконично описывает логику без необходимости использовать ключевые слова function и return.

php
<?php
// Структура корзины (ассоциативный многомерный массив)
$cart = [
    101 => ['name' => 'Мышь', 'price' => 25.0, 'quantity' => 2],
    105 => ['name' => 'Клавиатура', 'price' => 70.0, 'quantity' => 1]
];

// Расчет общей суммы с использованием array_reduce или array_map+array_sum
// Используем стрелочную функцию (arrow function)
$total = array_sum(array_map(fn($item) => $item['price'] * $item['quantity'], $cart));

echo "Сумма корзины: $total";

Как в PHP объявить функцию, которая не должна ничего возвращать?

Напишите ключевое слово, которое используется в PHP 8 для объявления стрелочной (короткой) функции.

Функция PHP Описание Пример в E-commerce
array_key_exists Проверяет наличие ключа в массиве Проверка, есть ли product_id в корзине
array_sum Считает сумму элементов Подсчет итоговой стоимости
unset Удаляет переменную или элемент массива Удаление товара из корзины