• Теория
  • Теория

Объявляем и вызываем функцию

Мы вывели на страницу товары из массива $order, но цена и стоимость доставки у всех товаров получились одинаковые. Почему так вышло?

Дело в том, что мы считаем итоговую цену и стоимость доставки только один раз — для того товара, который записан в переменной $id в сценарии. После этого в цикле подставляем одни и те же числа для всех товаров.

$id = $order[1];                       // Получаем идентификатор товара
$price = get_product_price($id);       // Получаем цену товара
$discount = get_product_discount($id); // Получаем скидку на товар
$final_price = $price - $discount;    // Считаем итоговую цену

// Выводим одну и ту же цену для всех товаров
<?php foreach($order as $id): ?>
  ...
  <td><?= $final_price ?></td>
  ...
<?php endforeach; ?>

Нам нужно посчитать цену и стоимость доставки для каждого товара в отдельности. Переносить вычисления внутрь цикла в шаблоне — плохая идея. Что если верстальщик случайно что-то удалит? Или понадобится вывести данные в нескольких местах?

Есть способ получше. Используем функцию.

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

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

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

function my_func() {
  keks_log('Я функция my_func');
}

Когда функцию объявляют, PHP запоминает её, но при этом код внутри фигурных скобок не выполняется. Это похоже на «быстрый набор» на смартфоне. Сначала мы привязываем номер к ярлыку на экране, а потом нажимаем на этот ярлык, чтобы позвонить. Так же и с функциями. Сначала мы привязываем фрагмент кода к имени функции, а после вызываем эту функцию.

Чтобы вызвать функцию, пишем её имя и круглые скобки:

my_func(); // Выведет: "Я функция my_func"

Функцию можно вызывать любое число раз.

Создадим функцию для вычисления итоговой цены товара и потренируемся вызывать её.

Думпо временно убрал часть кода из сценария, чтобы он нам не мешал.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Массивы и функции в PHP» тренажёра «Знакомство с PHP» можно после регистрации и оформления подписки.