У меня есть метод класса, который обновляет ценовые предложения товара:
public function updatePrices(int $productId, array $arPrices, ?Closure
$beforeUpdate, ?Closure $afterUpdate) : void
{
# update ..
}
Возникла потребность, в некоторых случаях выполнять какие-то действия до и после выполнения кода обновления цены.
Хотелось бы это реализовать через callback
.
т.е. методу нужно 2 дополнительных параметра, в которые можно будет передавать анонимную функцию и в этих функциях должен быть доступ к $productId
и $arPrices
.
Т.е. 2 события, beforeUpdate
и afterUpdate
, в beforeUpdate
должна быть возможность модификации массива $arPrices
или отмены обновления.
Как я себе это представляю (вероятно код неправильный):
public function updatePrices(int $productId, array $arPrices,
?Closure $beforeUpdate, ?Closure $afterUpdate) : void
{
if($beforeUpdate !== null) {
$modifyArPrices = $beforeUpdate($productId, $arPrices);
if($modifyArPrices == null) { # отменяем обновление цен
return;
}
$arPrices = $modifyArPrices; # Возвращаем модицифированный массив цен
}
# update ..
if($afterUpdate !== null) {
$afterUpdate($productId, $arPrices);
}
}
При необходимости пишу так:
$this->updatePrices(1, ["BASE_PRICE" => 123],
function (int $productId, array $arPrices) : ?array {
# Выполняю какие-то действия, при необходимости изменяю и возвращаю массив $arPrices
# или
# return null; # для того, чтобы отменить изменения цен
}, null);
Подскажите пожалуйста, как будет выглядеть рабочий код. Как это делается? И как решаются подобные задачи правильным образом, с точки зрения архитектуры?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как можно записать цену в переменную по значению ключа, например BTC, ETH, LTC смскрин: https://dl
Есть php скрипт который работает в фоне ( nohup php scriptphp & )
В моем приложении есть 2 активити, в каждом из которых я создаю список из View полученных через LayoutInflaterПри создании каждого view-пункта списка...