Erreurs et exceptions
Les erreurs peuvent comprendre les erreurs dans le programme lui-même, telles que les erreurs de syntaxe. Les exceptions ont tendance à se produire lorsque le programme ne s'exécute pas comme prévu ou n'est pas conforme au processus normal ; pour le langage PHP, les mécanismes utilisés pour gérer les erreurs et les exceptions sont complètement différents, il est donc facile de semer la confusion.
Par exemple, nous voulons gérer le cas de division par 0 en interceptant l'exception, mais avant que l'exception ne soit interceptée, PHP déclenche une erreur.
try { $a = 5 / 0; } catch (Exception $e) { $e->getMessage(); $a = -1; // 通过异常来处理 $a 为 0 的情况,但是实际上,捕获不到该异常 } echo $a; // PHP Warning: Division by zero
En d'autres termes, PHP déclenche le cas de division par 0 comme une erreur, et ne lève pas automatiquement d'exception, elle ne peut donc pas être interceptée. De même, dans de nombreux cas, PHP ne peut pas automatiquement lever d'exceptions. Les exceptions ne peuvent être levées que manuellement via des instructions if-else et combinées avec la méthode throw.
La situation ci-dessus se produit principalement parce que le mécanisme d'exception est le produit de l'évolution de PHP vers l'orientation objet. Avant cela, le rapport d'erreurs PHP se faisait principalement via le mécanisme d'erreur. Par conséquent, dans de nombreux cas, les erreurs PHP ont plus de valeur que les exceptions. Cependant, PHP7 commence à unifier les deux, permettant de générer des erreurs comme des exceptions (cette partie sera expliquée dans la section exceptions).
Niveau d'erreur
Les erreurs en PHP peuvent être comprises comme des situations qui empêchent le bon fonctionnement du script et peuvent être déterminées de haut en bas selon le niveau d'erreur. Divisé en cinq catégories
1 Parse error
ou Syntax Error
- erreur d'analyse de syntaxe, lorsque l'erreur est déclenchée, le script ne peut pas s'exécuter du tout
2. . Fatal Error
- erreur fatale, déclenchée Après cette erreur, les scripts suivants ne peuvent pas continuer à s'exécuter
3.Warning Error
- Si quelque chose d'inapproprié se produit, le script peut continuer à s'exécuter ; 4.
Notice Error
5.
Deprecated Error
Par défaut, PHP déclenche une erreur et affiche le niveau d'erreur et l'invite correspondante.
echo "abc" // PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';
Parse Error
Exemple - Utiliser une fonction inexistante echo "before\n"; foo(); echo "after"; // 本行无法继续执行 // before // PHP Fatal error: Uncaught Error: Call to undefined function foo()
Fatal Error
Exemple d'erreur d'avertissement - Introduction d'un fichier inexistant
$a = "foo"; include('bar.php'); echo $a; // 程序继续执行 // PHP Warning: include(bar.php): failed to open stream: No such file or directory ... // foo Notice Error 示例 - 输出不存在的变量 echo $foo; echo 12345; // PHP Notice: Undefined variable: foo // 12345
Exemple - Passage de nombres au lieu de chaînes dans certaines fonctions de chaîne
strpos('12345', 3); // PHP Deprecated: strpos(): Non-string needles will be interpreted as strings in the future
Deprecated Error
En plus du message déclencheur par défaut, les utilisateurs peuvent également utiliser la fonction set_error_handler pour personnaliser la gestion des erreurs. La plupart des types d'erreurs peuvent être personnalisés, à l'exception de
,, E_ERROR
, <. 🎜> , E_PARSE
, E_CORE_ERROR
dehors. E_CORE_WARNING
set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) : mixed
E_COMPILE_ERROR
E_COMPILE_WARNING
Exemple<?php // E_ALL - 处理全部错误类型 set_error_handler('customError', E_ALL); /** * @param int $errno 错误的级别 * @param string $errstr 错误的信息 * @param string $errfile 错误的文件名(可选) * @param string $errline 错误发生的行号(可选) */ function customError(int $errno, string $errstr, string $errfile, string $errline) { echo sprintf('错误消息为 %s', $errstr); } $a = 5 / 0; // 错误消息为 Division by zero
function division($a, $b) { if($b == 0){ @trigger_error("0 不能作为除数", E_USER_NOTICE); return -1; } return $a / $b; } echo division(10, 0);
Configurations liées aux erreurs
Quelques configurations courantes liées à la gestion des erreurs
Quantity- Définir le niveau de rapport d'erreurs
● error_reporting
- S'il faut afficher les erreurs
● display_errors
- S'il faut afficher l'affichage au démarrage de PHP
● display_startup_error
-Définissez s'il faut enregistrer les informations d'erreur du script en cours d'exécution dans le journal des erreurs du serveur ou error_log
"Modern PHP" propose quatre règleslog_errors
display_errors = On display_startup_error = On error_reporting = -1 log_errors = On
display_errors = Off display_startup_error = Off ; 报告 Notice 以外的所有错误 error_reporting = E_ALL & ~E_NOTICE log_errors = On
Standards de codage Symfony Related
Les chaînes de messages d'exception et d'erreur doivent être fusionnées à l'aide de ;
sprintf
lancer une nouvelle CommandNotFoundException(sprintf('Command "%s" n'existe pas. ', $name)) ;
Lorsque le type d'erreur est
, vous devez ajouter
E_USER_DEPRECATED
@
@trigger_error("foo", E_USER_DEPRECATED) ;
!Pour plus de connaissances sur php, veuillez visiter le
tutoriel php
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!