Parmi les changements apportés à PHP7, ceux qui ont un plus grand impact incluent la Gestion des exceptions.
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.
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
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.
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.
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!