Introduction détaillée aux exemples de code de gestion des exceptions en PHP7

黄舟
Libérer: 2023-03-06 14:10:02
original
1385 Les gens l'ont consulté

Avant-propos

Parmi les changements apportés à PHP7, ceux qui ont un plus grand impact incluent la Gestion des exceptions.

Présentation

Davantage d'exceptions sont gérées directement via PHP. La différence par rapport au PHP5 précédent est que davantage d'exceptions sont générées via les exceptions d'erreur.

Comme une extension normale, les exceptions d'erreur continueront à apparaître jusqu'à ce que le bloc catch correspondant corresponde. Si aucune correspondance n'est établie, l'ensemble set_exception_handler() sera déclenché pour effectuer le traitement. S'il n'y a pas de gestionnaire d'exception par défaut, l'exception sera convertie en erreur fatale et sera traitée comme une erreur traditionnelle.

Étant donné que l'erreur n'hérite pas des exceptions dans la hiérarchie des erreurs, un code comme celui-ci catch (Exception $e) { ... } n'attrapera pas l'exception correspondante en PHP5. Nous pouvons utiliser le code catch (Error $e) { ... } ou set_exception_handler() pour gérer l'erreur.

Mauvaise hiérarchie

  • Jetable

    • ….

    • Erreur arithmétique ArithmeticError

    • Erreur d'instruction AssertionError

    • Erreur d'analyse ParseError

    • TypeError Erreur de type

    • pisionByZeroError Diviseur par 0 erreur

    • Erreur Erreur

    • Exception

PHP RFC

Interface jetable

function add(int $left, int $right) {
    return $left + $right;
}try {    echo add('left', 'right');
} catch (Exception $e) {    // Handle exception} catch (Error $e) { // Clearly a different type of object
    // Log error and end gracefully
    var_dump($e);
}
Copier après la connexion

Ici, il n'y a pas d'erreur du serveur 500. La raison en est que l'erreur dans PHP7 l'intercepte et ne bouillonne pas sur le serveur.

object(TypeError)#1 (7) {
  ["message":protected]=>  
  string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14"
  ["string":"Error":private]=>  string(0) ""
  ["code":protected]=>  int(0)
  ["file":protected]=>  string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
  ["line":protected]=>  int(9)
  ["trace":"Error":private]=>
  array(1) {
    [0]=>
    array(4) {
      ["file"]=>      string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
      ["line"]=>      int(14)
      ["function"]=>      string(3) "add"
      ["args"]=>
      array(2) {
        [0]=>        string(4) "left"
        [1]=>        string(5) "right"
      }
    }
  }
  ["previous":"Error":private]=>
  NULL
}
Copier après la connexion

Pour que nous puissions les enregistrer via des journaux.

Exceptions dans le moteur (pour PHP 7)

function call_method($obj) {
    $obj->method();
}try {
    call_method(null);
     // oops!
     } 
     catch (EngineException $e) {    
    echo "Exception: {$e->getMessage()}\n";
}//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
Copier après la connexion

Si l'exception n'est pas interceptée, PHP continuera à générer la même erreur fatale qu'actuellement.

Reclasser les avis E_STRICT


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal