- Теория
- Теория
Передаём функции идентификатор товара
Мы создали функцию, которая возвращает итоговую цену, и вызвали её в шаблоне. В результате у всех товаров на странице снова отобразилась одна и та же цена. Мы зря создавали функцию? Ничего подобного. Чтобы показать правильную цену для каждого товара, осталось лишь передать функции правильные данные.
До этого мы вручную передавали функции полную цену и скидку на товар, но мы можем сказать функции самой получать их из базы данных. Используем специальные команды, чтобы узнать цену и скидку на конкретный товар:
- get_product_price ($id) — цена;
- get_product_discount ($id) — скидка.
Для обеих команд нужен идентификатор товара. Укажем, что функция get_final_price
принимает его как аргумент. Другие аргументы больше не понадобятся:
function get_final_price($id) {
...
}
В теле функции узнаем цену и скидку на товар, чей идентификатор мы получили. Сохраним их в переменные:
$price = get_product_price($id);
$discount = get_product_discount($id);
Функция по-прежнему будет возвращать разницу между $price
и $discount
, но теперь их значения будут браться из базы данных, а не из аргументов.
Идентификаторы товаров хранятся в массиве $order
. С помощью foreach
в шаблоне мы получаем новый идентификатор на каждой итерации цикла.
<?php foreach($order as $id): ?>
Вызовем функцию get_final_price
внутри цикла и передадим ей в качестве аргумента идентификатор товара. На каждой итерации цикла функция будет вызываться заново, с новым идентификатором. В результате для разных товаров выведется разная итоговая цена.
Вы заметили, что использование команд из базы данных очень похоже на вызовы функций? Это они и есть. Команды get_product_price
и get_product_discount
— самые обычные функции, просто написанные другими разработчиками.
Переменные, объявленные внутри функции, доступны только внутри этой функции. А внешние переменные, наоборот, внутри функции не видны. Это называется областью видимости. Вы можете узнать о ней больше в документации.
- index.html
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.