Округление до БЛИЖНЕГО ЗНАЧЕНИЯ WOOCOMMERCE [дубликат]

Я понимаю, что на этот вопрос уже был дан ответ, но я добавлю это, поскольку он может кому-то помочь:

Мне удалось (непреднамеренно) создать ошибки без фрейма стека из функции, которая использовала свои собственные обработчик ошибок, чтобы поддерживать управление выполнением при вызове потенциально «опасной» функции, например:

// Assume the function my_error_handler() has been defined to convert any
// PHP Errors, Warnings, or Notices into Exceptions.

function foo() {
    // maintain control if danger() crashes outright:
    set_error_handler('my_error_handler');

    try {
        // Do some stuff.

        $r = danger();
    } catch (Exception $e) {
        $r = 'Bad Stuff, Man!';
    }

    restore error_handler();
    return $r;
}

В конце выполнения программы произошел «непрослеживаемый сбой» если логика в «Do some stuff» возвращается из foo () напрямую, минуя вызов функции restore_error_handler (). То, что я убрал из опыта, следующее:

  1. PHP поддерживает стек обработчиков ошибок, который становится все глубже / выше с каждым вызовом set_error_handler ().
  2. Плохие вещи могут произойти, если вы нажимаете обработчики ошибок на стек и не очищаетесь после себя, прежде чем программа выйдет «нормально».

Это была сложная ошибка для изоляции - Я в основном сузил проблему до указанной выше функции, а затем смотрел на нее, пока мои глаза не кровоточили.

Итак, как бы я отследил это, зная, что я знаю сейчас? Поскольку я не знаю, как можно напрямую проверять «стек» обработчика ошибок PHP, я думаю, что имеет смысл использовать объект Singleton для инкапсуляции всех операций set / restore для обработчиков ошибок PHP. По крайней мере, тогда можно было бы проверить состояние Singleton перед выходом из программы в обычном режиме, и если обнаружены «оборванные» обработчики ошибок, чтобы генерировать разумное сообщение об ошибке / предупреждении до того, как PHP выйдет из игры.

2
задан NNKK 10 April 2015 в 04:54
поделиться

1 ответ

Вы можете добиться того же, просто используя функцию php round(), как показано ниже:

function round_price_product( $price ){
    // Return rounded price
    return round( $price );
}

Надеюсь, что это сработает для вас.

0
ответ дан Jenis Patel 22 August 2018 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: