Задать вопрос
daniil46
@daniil46
Начинающий погроммист

Как правильно завершить работу скрипта PHP?

Здравствуйте! Есть консольное приложение, которое на входе принимает некоторые параметры и выводит результат. Если параметр введён некорректно, то перехватывается ошибка, выводится пользовательское сообщение и завершается работа скрипта через die() / exit(), так как дальнейшее его выполнение не имеет смысла.

Код просто для примера:
class App
    {
        public static function checkEven ($number)
        {
            try {
                if ($number % 2 !== 0) {
                    throw new Exception("Odd number");
                } 
                return $number . ' even' . PHP_EOL;
            } catch (Exception $error) {
                print_r($error->getMessage() . PHP_EOL);
                
                die(); // @codeCoverageIgnore
                print_r("Too late");
            }
        }
    }
    
    print_r(App::checkEven(9));


При тестировании UNIT-тестами с некорректными входными данными завершается работа приложения вместе с самим тестированием (что не удивительно). Запись с // @codeCoverageIgnore не помогла.

Существуют ли другие способы пропустить выполнение die() или исключения следует обрабатывать иначе? Если да, то как?
  • Вопрос задан
  • 609 просмотров
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
Decadal
@Decadal
>Существуют ли другие способы пропустить выполнение die() или исключения следует обрабатывать иначе? Если да, то как?

замените die на return и поменяйте его местами с print_r. Вам на самом деле не нужно насильно обрывать работу php - как только код выполнится, обработка запроса завершится сама.
Если вы опасаетесь что где-то ниже по коду выполнится какое-то действие, которое должно выполниться только в случае успешного завершения - добавьте туда дополнительное условие которое будет проверять результат, либо перехватывайте исключение именно там, а в catch оставьте пустоту. И всё будет хорошо.
Ответ написан
php666
@php666
PHP-макака
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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