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