Maison > Article > développement back-end > La différence entre les messages d'erreur et les messages d'exception en php
Qu'est-ce qu'une exception en PHP :
Une situation inattendue se produit lorsque le programme est en cours d'exécution, et elle est autorisée à se produire (vous ne Je ne veux pas non plus que cela se produise) Situation anormale) Mais c'est une situation anormale. Selon notre logique normale, les erreurs ne devraient pas se produire, mais les erreurs qui se produisent encore sont des erreurs de logique et de processus métier, pas de compilation ou de syntaxe. erreur activée.
Qu'est-ce qu'une erreur en PHP ? La plupart de ses propres problèmes sont causés par une syntaxe et un environnement de serveur incorrects, ce qui empêche le compilateur de passer le contrôle ou même de s'exécuter. L'avertissement et l'avis sont tous deux des erreurs, mais leurs niveaux sont différents et les erreurs ne peuvent pas être détectées par try-catch.
La déclaration ci-dessus a des conditions préalables :En PHP, car dans d'autres langages, on ne peut pas tirer de telles conclusions, c'est-à-dire des exceptions et des erreurs. Le dicton a différents significations dans différentes langues.
En PHP, toute erreur ou code anormal sera traité comme des erreurs et ne sera pas généré sous forme d'exceptions. Cependant, il existe également certaines situations où des exceptions et des erreurs seront générées en même temps (cela). on dit que, je n'ai trouvé aucun exemple approprié). En d'autres termes, si vous souhaitez intercepter automatiquement les exceptions lorsque la connexion à la base de données échoue, cela ne fonctionnera pas, car ce n'est pas une exception, mais une erreur. Mais c'est différent en Java. Cela capturera de nombreux comportements incompatibles avec les attentes en tant qu'exceptions.
La gestion des exceptions PHP est-elle inutile ? D'après l'analyse ci-dessus, nous pouvons voir que PHP ne peut pas lancer activement d'exceptions, mais vous pouvez lancer des exceptions manuellement. Si vous savez où cela se produira, si quelque chose ne va pas. , ne pouvez-vous pas simplement ajouter if else pour le résoudre ? Pourquoi devez-vous lancer une exception manuellement ? Puisqu'elle peut être lancée manuellement, cela prouve qu'il ne s'agit pas d'une exception, mais qu'elle est attendue.D'après ma compréhension, c'est là que la gestion des exceptions PHP est inutile (pas nécessairement correcte). Par conséquent, le mécanisme d'exception de PHP n'est pas si parfait, mais les étudiants qui ont utilisé le framework connaissent tous cette situation : vous pouvez écrire directement le code au début de la capture "automatique" des exceptions PHP dans le framework. Pourquoi est-ce. ?
Les étudiants qui ont lu le code source savent qu'il y a trois fonctions impliquées dans le framework : register_shutdown_function, set_error_handler, set_exception_handler, trois technologies noires Grâce à ces fonctions, nous pouvons réaliser la fausse capture automatique des exceptions et des erreurs par PHP.
Lance des erreurs sous forme d'exceptions (ne peut pas être lancée complètement)
D'après l'explication ci-dessus, nous savons que les erreurs en php ne peuvent pas être capturées sous forme d'exceptions, mais nous devons laisser les lancer, ce qui a élargi la portée de l'influence de try-catch. Nous avons parlé plus tôt de la méthode set_error_handler(). À quoi sert-elle ? Elle capture les erreurs, afin que nous puissions l'utiliser pour capturer les erreurs, puis les lancer. sous la forme d'une exception, ok, essayez l'écriture suivante :
<?php set_error_handler('error'); function error($type, $message, $file, $line) { throw new \Exception($message . '错误当做异常'); } $num = 0; try { echo 1/$num; } catch (Exception $e){ echo $e->getMessage(); } ?>
En PHP, il est préférable de ne pas simplement lancer d'exceptions directement là où des erreurs peuvent survenir. Dans certains frameworks, ce qui précède est réécrit. Les méthodes, les exceptions et les erreurs peuvent se produire. être lancé normalement
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!