Maison >développement back-end >tutoriel php >Introduction détaillée aux exemples de code de gestion des exceptions en PHP7

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

黄舟
黄舟original
2017-03-11 09:22:211450parcourir

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);
}

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
}

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进行的错误的拦截

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!

Déclaration:
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