Maison  >  Article  >  développement back-end  >  Explication détaillée de la gestion des exceptions et des erreurs dans php7

Explication détaillée de la gestion des exceptions et des erreurs dans php7

coldplay.xixi
coldplay.xixiavant
2021-03-30 10:38:142516parcourir

Explication détaillée de la gestion des exceptions et des erreurs dans php7

Tout d'abord, je déclare que la version PHP de l'auteur est 7.2

    • Aperçu des exceptions et erreurs
        • Qu'est-ce qu'une exception ?
        • Qu'est-ce qu'une erreur ?
        • Gestion des exceptions
    • Niveau d'erreur
    • Gestionnaire d'erreurs personnalisé
        • set_error_handler ()
        • set_exception_handler()
        • register_shutdown_function()
        • Gestion des erreurs du framework

Recommandé (gratuit) : PHP7

Aperçu des exceptions et des erreurs

Qu'est-ce qu'un exception?

L'exception fait référence à une situation qui ne répond pas aux attentes et qui est différente du processus normal pendant le fonctionnement du programme.

Par exemple, si vous vous connectez à la base de données et que tous les paramètres sont écrits, mais que le lien ne peut pas monter, ce n'est pas comme prévu

Il peut être capturé par try-catch

Qu'est-ce qu'une erreur ?

est un problème qui appartient au programme PHP lui-même. Il est généralement causé par une syntaxe illégale et des problèmes environnementaux, ce qui empêche le compilateur de passer le contrôle ou même de s'exécuter.
Les réchauffements et les avis que vous rencontrez habituellement sont tous des erreurs, mais ils sont de différents niveaux.

Par exemple :

  • TypeError (erreur de type) Le type de paramètre de fonction que j'ai spécifié est incohérent avec le paramètre passé dans
  • ArithmeticError (erreur arithmétique)
  • ParseError (erreur d'analyse) Dans le fichier chargé, il y a une erreur de syntaxe dans include "demo.php" ou eval(); provoquant un échec d'analyse
  • AssertionError (erreur d'assertion) Cette erreur se produit lorsque l'assertion prend effet
  • pisionByZeroError (le dénominateur est zéro) Lors d'opérations telles que la division, le dénominateur est 0

Sauf ces situations, le reste sont des exceptions

Gestion des exceptions

Dans le php5 précédent. Lancez l'erreur dans try-catch

Donc, si vous souhaitez intercepter une exception à l'avenir et que vous ne savez pas si l'exception est une erreur ou une exception. , vous pouvez le lancer comme ça

try{
    ……
}catch(Throwable $e){
    ……
}

Niveaux d'erreur

Les erreurs en php ont aussi des niveaux

>Parse error > Fatal Error > Waning >NoticeDeprecated

Deprecated 最低级别的错误(不推荐,不建议)
使用一些过期函数的时候会出现,程序继续执行

Notice 通知级别的错误
使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行
        E_NOTICE      // 运行时通知。表示脚本遇到可能会表现为错误的情况.
        E_USER_NOTICE // 用户产生的通知信息。Waning 警告级别的错误
程序出问题了,需要修改代码!!!程序继续执行
        E_WARNING         // 运行时警告 (非致命错误)。
        E_CORE_WARNING    // PHP初始化启动过程中发生的警告 (非致命错误) 。
        E_COMPILE_WARNING // 编译警告
        E_USER_WARNING    // 用户产生的警告信息Fatal Error 错误级别的错误
程序直接报错,需要修改代码!!!中断程序执行,可使用register_shutdown_function()函数在程序终止前触发一个函数
        E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本
        E_CORE_ERROR    // PHP启动时初始化过程中的致命错误
        E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
        E_USER_ERROR    // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)Parse error 语法解析错误
语法检查阶段报错,需要修改代码!!!中断程序执行,除了修改ini文件,将错误信息写到日志中,什么也做不了
        E_PARSE  //编译时的语法解析错误

Gestionnaire d'erreurs personnalisé

Parfois, le gestionnaire d'erreurs fourni avec PHP ne peut pas répondre pleinement à nos besoins. La plupart du temps, nous devons tous remplacer manuellement la gestion des exceptions.

php nous fournit trois fonctions pour nous aider à le gérer, à savoir la fonction

set_error_handler()

    pour héberger le gestionnaire d'erreurs, qui peut être personnalisé Erreur processus de manipulation.
  • Si une erreur se produit dans le code avant cette fonction, notre fonction de traitement personnalisé ne sera pas appelée car elle n'a pas encore été enregistrée
  • Après avoir défini cette fonction, error_reporting() sera invalide
  • Les erreurs de niveau suivantes ne peuvent pas être gérées par les fonctions définies par l'utilisateur : E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING. Cette fonction ne peut détecter que certaines de nos erreurs de niveau Avertissement et Note
  • <.>

set_exception_handler()

Utilisé pour la gestion des exceptions non interceptées

register_shutdown_function()

Fonction : enregistrez-en une à exécuter à la fin de PHP La fonction
  • capture les erreurs PHP : erreur fatale, erreur d'analyse, etc. Cette méthode est la dernière fonction appelée avant la fin de l'exécution du script PHP, comme les erreurs de script, die(), la sortie, les exceptions et la fin normale. ,
  • S'il est utilisé pour la gestion des erreurs, vous devez coopérer avec
  • qui peut obtenir la dernière erreur survenue.
  • error_get_last()
    举例
    register_shutdown_function(&#39;shutdown&#39;);function shutdown(){
        if ($error = error_get_last()) {
            var_dump($error);
        }
    }$name   //没写 ; 号
  • Résultats de l'exécution


Emmmmm N'est-ce pas un non-sens ? Il n'est clairement pas exécuté ? Parse error: syntax error, unexpected ';' in /app/swoole/errorDemo.php on line 34
En fait, la raison est qu'avant que le programme ne soit exécuté, notre PHP va d'abord vérifier les problèmes de syntaxe de notre programme. S'il n'y a pas de problèmes, nous pouvons exécuter notre programme.

Notre code ci-dessus n'a pas réussi notre vérification de syntaxe, une erreur a donc été signalée directement.

Alors quel est le problème ? Quand nous sommes dans le framework, pourquoi les frameworks nous signalent-ils toujours des erreurs ?

Gestion des erreurs du framework

Dans le framework, son code est chargé via un fichier d'entrée. Lorsque notre PHP détecte des erreurs de syntaxe, nous vérifions uniquement notre index.php. Si cela le nécessite, il ne sera pas détecté. Lorsque notre code fait une erreur, c'est une erreur détectée au moment de l'exécution, donc notre framework peut répondre en conséquence

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer