PHP как обязательно перехватить все исключения - PullRequest
0 голосов
/ 05 июля 2019

Предположим, у меня есть некоторый код, который использует try{...} catch() { ... } блоки. В проверенном коде есть различные нетривиальные сторонние объекты (или, возможно, другие данные).

Часто эти сторонние объекты генерируют свои собственные сторонние исключения; как я могу быть уверен, что поймать их, не зная, как на самом деле называются эти исключения?

Имеются ли в различных частях кода различные сторонние объекты и методы, существует ли относительно быстрый способ перехвата всех исключений для дальнейшего изучения?

Подробный пример использования (Stripe имеет множество исключений)

$someObject = new \someNamespace\someClass();
try {
    $x = $someObject->someFunction($someData); 
    $y = $stripeObject->StripeProcessing($x);
}
catch(\Stripe\Error\Card $ex) {
        // Since it's a decline, \Stripe\Error\Card will be caught
        error_log("Stripe Card Error: ".$ex->message);
        $message = "There was a card error: ".$err['message'];
    } 
catch (\Stripe\Error\RateLimit   | 
    \Stripe\Error\InvalidRequest | 
    \Stripe\Error\Authentication |   
    \Stripe\Error\ApiConnection  |  
    \Stripe\Error\Base $ex) {
        $message = "There was a Stripe error: ".$ex->getMessage();
        error_log("Stripe Other Error: ".print_r($ex,true));
    } 
catch( \someNamespace\GiggityException |
    \someNamespace\GiggityNewMexicoException){
    error_log("Family Guy! ".print_r($ex,true));
    }
catch (Exception $ex){
    error_log("Elvis has died! ".print_r($ex,true));
}

Может привести к:

Неустранимая PHP-ошибка: Uncaught SomeDistributor \ SomeClass \ Exception: соединение () не удалось. ... и т.д ... и т.д ...

Так что выше есть куча Исключений, чтобы поймать, из двух пространств имен, а также общий Exception в конце; Хотя реакция кода на все это очень похожа; Кажется, мне все еще нужно знать имя каждого брошенного класса Exception и кодировать его вручную;

Итак, есть ли способ перехватить ВСЕ возможные исключения в одном месте?

(Перед тем как дифференцировать и разветвлять, как обращаться с конкретными при необходимости)

Я уверен, что решение этого очень простое, но я не могу найти литературу по этому вопросу (d'oh; С тех пор я нашел литературу ).

1 Ответ

2 голосов
/ 05 июля 2019

Этот сайт гласит:

Простейший способ перехвата исключений - использование универсального блока try-catch. Поскольку исключения являются объектами, все они расширяют встроенный класс Exception (см. «Бросание исключений» в PHP), что означает, что перехват каждого брошенного исключения так же прост, как указание на тип глобального объекта исключения, на что указывает добавление обратной косой черты перед :

try {
  // ...
} catch ( \Exception $ex ) {
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...