У меня есть метод класса, который обновляет ценовые предложения товара:
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);
Подскажите пожалуйста, как будет выглядеть рабочий код. Как это делается? И как решаются подобные задачи правильным образом, с точки зрения архитектуры?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как можно записать цену в переменную по значению ключа, например BTC, ETH, LTC смскрин: https://dl
Есть php скрипт который работает в фоне ( nohup php scriptphp & )
В моем приложении есть 2 активити, в каждом из которых я создаю список из View полученных через LayoutInflaterПри создании каждого view-пункта списка...