L'une des raisons pour lesquelles le langage PHP est simple est le mécanisme de gestion des erreurs de PHP. À mesure que le langage PHP devient de plus en plus. moderne, il apparaît aussi Exceptions, ce billet de blog parle simplement d'erreurs et d'exceptions pour faciliter la compréhension du système. De plus, l'existence d'exceptions est commune à tout langage, il est donc essentiel d'apprendre un langage pour comprendre le mécanisme des exceptions
. Qu'est-ce qu'une erreur
Lorsque le langage PHP rencontre une situation anormale (telle qu'un échec de connexion à la base de données ou une erreur de transfert de paramètres de fonction), certaines erreurs seront signalées en plusieurs types. D'autres erreurs ne mettront pas fin au programme.
La raison pour laquelle PHP rend les gens simples est que le programme ne signale pas fréquemment les erreurs, donnant aux gens l'illusion d'une écriture fluide et pratique.
C'est aussi pour cette raison que la rigueur et la précision de. Les programmes PHP sont médiocres Il y a de nombreux problèmes.Par exemple, lorsque la requête mysql_fetch_array rencontre une erreur réseau et renvoie FALSE (le programme ne se termine pas), si le programme appelant pense que la requête n'a pas de données correspondantes, alors le programme est essentiellement faux.
Grâce à la commande error_reporting de php.ini ou dynamiquement. En appelant la fonction error_reporting(), nous pouvons choisir le type d'erreurs à signaler. Grâce à la commande display_errors, nous pouvons contrôler si les erreurs sont générées en ligne. la sortie des erreurs dans le journal.
Comment utiliser correctement les erreurs
Qu'il s'agisse d'une fonction système ou d'une fonction personnalisée, si une erreur est rencontrée en interne, comment en informer l'appelant ? la fonction renvoyant VRAI ou FAUX. Cette méthode de traitement présente plusieurs inconvénients :
gird L'appelant sait seulement qu'une erreur s'est produite, mais les informations sur l'erreur renvoyées sont trop peu nombreuses et il manque une description du type d'erreur. la logique de traitement et la gestion des erreurs sont mélangées, et le code généré sera très flou.
Une petite astuce : la fonction error_get_last() renverra les détails spécifiques de l'erreur la plus récente. La fonction set_error_handler() pour héberger toutes les erreurs
● La fonction trigger_error () peut déclencher des erreurs personnalisées et peut être utilisée pour remplacer l'instruction return dans la fonction
● Afficher erreurs aux utilisateurs, comme renvoyer les erreurs aux utilisateurs de manière plus conviviale Quantity La commande display_errors doit être désactivée dans l'environnement de production et activée dans l'environnement de développement Traité par l'ancien framework PHP Codeigniter Vous pouvez apprendre des erreurs way
`function _error_handler($severity, $message, $filepath, $line) { $is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity); //输出500错误HTTP状态码 if ($is_error) { set_status_header(500); } //对于不需要处理的错误则直接中断 if (($severity & error_reporting()) !== $severity) { return; } //将所有的错误记录到日志中 $_error =& load_class('Exceptions', 'core'); $_error->log_exception($severity, $message, $filepath, $line); //友好的输出所有错误 if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){ $_error->show_php_error($severity, $message, $filepath, $line); } //假如致命错误则直接退出 if ($is_error) { exit(1); } } set_error_handler('_error_handler');`
Qu'est-ce qu'une exception
L'exception est aussi une erreur, elle a les caractéristiques suivantes :
Quantity Les exceptions peuvent être personnalisées, SPL fournit de nombreux types d'exceptions, vous pouvez également l'étendreQuantity Les exceptions sont les plus courantes. L'action consiste à capturer, afin que les développeurs puissent effectuer un traitement ultérieur en fonction d'erreurs spécifiques. Par exemple, ils peuvent renvoyer des invites conviviales à l'utilisateur en fonction du contexte de l'exception ou continuer à lever une exception et laisser le programme en amont la gérer. Si l'exception n'est toujours pas interceptée, le programme se terminera directement.
● Une autre action pour les exceptions consiste à lancer une logique métier via des fonctions et que vous rencontrez des situations inattendues, vous pouvez directement lancer une exception. ● Les exceptions peuvent être capturées. couche par couche par le code. Si le programme le plus externe n'a pas été intercepté, le code cessera de s'exécuter directement ● Si l'exception en PHP ne peut pas être interceptée, elle sera écrite dans le journal des erreurs système comme une erreur fatale
Explication intuitive. code:
`function inverse($x) { if ($x < 10) { throw new Exception('x<10'); } elseif ($x >= 10 and $x < 100) { throw new LogicException('x>=10 and x<100'); } return $x; } try { echo inverse(2)."\n"; } catch (LogicException $e) { echo 'Caught LogicException: ', $e->getMessage(), "\n"; } catch (Exception $e) { echo 'Caught Exception: ', $e->getMessage(), "\n"; throw $e; }`
Meilleures pratiques d'exception
● Les exceptions peuvent rendre le code plus clair, permettant aux développeurs de se concentrer sur l'écriture de la logique métier
● La création d'exceptions extensibles n'est-elle pas suffisante ? ne devrait capturer que les exceptions qui peuvent être gérées par cette couche et laisser le code en amont gérer les exceptions qui ne peuvent pas être gérées.
Exceptions en PHP7
PHP7 encourage l'utilisation d'exceptions pour remplacer les erreurs, mais il est impossible d'annuler la gestion des erreurs. mécanisme d'un seul coup. Vous devez être compatible, nous ne pouvons donc effectuer une transition que lentement.
Mais les exceptions peuvent être utilisées uniformément grâce à des solutions de contournement
● Exception d'erreur
Quand. Le mode strict est activé, de nombreuses erreurs dans PHP7 sont générées par des exceptions d'erreur. De cette façon, les exceptions peuvent être utilisées de manière uniforme. De cette façon, je peux utiliser les exceptions de manière uniforme Ce qui précède est le contenu détaillé de la compréhension systématique des erreurs et des exceptions en PHP. J'espère que cela vous sera utile. Lire le texte original : Comprendre systématiquement les erreurs et les exceptions en PHP