Уроки курса
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 мин

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

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

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

В этом уроке мы применим принцип Scaffolding (Скаффолдинг). Мы будем постепенно усложнять логику нашего магазина, переходя от простых условий к собственным функциям. Управляющие конструкции позволяют программе принимать решения. Например, если (if) корзина пуста, мы показываем сообщение, иначе (else) — выводим товары. Циклы (например, foreach) позволяют нам перебрать все товары в массиве корзины, чтобы посчитать их общую стоимость. Без циклов нам пришлось бы писать отдельную строку кода для каждого добавленного товара, что невозможно, так как мы не знаем заранее, сколько товаров выберет покупатель. Массивы в PHP бывают индексированными (где ключи — это числа от 0) и ассоциативными (где ключи — это строки, например 'price' или 'name'). В электронной коммерции ассоциативные массивы используются повсеместно для представления товаров.

php
<?php
// Ассоциативный массив, представляющий корзину
$cart = [
    ['name' => 'Футболка', 'price' => 20, 'quantity' => 2],
    ['name' => 'Джинсы', 'price' => 50, 'quantity' => 1]
];

$total = 0;

// Цикл foreach для подсчета итоговой суммы
foreach ($cart as $item) {
    $total += $item['price'] * $item['quantity'];
}

echo "Итого к оплате: $" . $total;
?>

Когда наш код становится большим, его необходимо разбивать на логические блоки — функции. Функция принимает входные данные (аргументы), выполняет логику и возвращает результат (return). Опираясь на архивные материалы нашего курса, давайте создадим функцию getStatusName. Мы применим строгую типизацию: укажем, что функция принимает целое число (int) и возвращает строку (string). Если передан неизвестный статус, мы выбросим исключение InvalidArgumentException. Исключения (Exceptions) — это механизм обработки критических ошибок. Вместо того чтобы вернуть неправильное значение и сломать процесс оплаты, мы "выбрасываем" ошибку, которую система может перехватить и корректно обработать, показав пользователю понятное уведомление.

php
<?php
// Функция со строгой типизацией аргументов и возвращаемого значения
function getStatusName(int $statusCode): string {
    return match($statusCode) {
        1 => 'Новый',
        2 => 'Оплачен',
        3 => 'Доставлен',
        default => throw new InvalidArgumentException('Неизвестный статус заказа'),
    };
}

// Вызов функции
try {
    echo getStatusName(2); // Выведет: Оплачен
    echo getStatusName(99); // Вызовет исключение
} catch (InvalidArgumentException $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>

Задание

Сценарий: Пользователь перешел в корзину. Вам нужно написать логику, которая проверяет массив сессии и высчитывает итоговую сумму.

  • Определить переменную $total со значением 0.
  • Проверить с помощью if, не пуст ли массив $cart.
  • Использовать цикл foreach для перебора $cart.
  • Внутри цикла умножить price на quantity и прибавить к $total.
10 баллов

Какое ключевое слово используется внутри функции, чтобы вернуть вычисленный результат обратно в основную программу?

Что произойдет в функции getStatusName, если передать в нее статус 5 (которого нет в конструкции match)?