PHP n'a pas réussi à capturer l'erreur d'analyse ?
漂亮男人
漂亮男人 2017-05-16 13:00:20
0
3
434

Le code est le suivant. La fonction de gestion des erreurs enregistrée register_shutdown_function n'est pas exécutée, ce qui est très étrange

rapport d'erreur (-1); ini_set('display_errors', 1); set_error_handler(fonction(){ echo "exécution du gestionnaire d'erreurs" ; }, E_ALL); set_exception_handler(fonction(){ echo "exécution du gestionnaire d'exceptions" ; }); register_shutdown_function(fonction(){ echo "exécution de la fonction d'arrêt" ; }); essayer{ 0$a; }attraper(exception $e){ echo "attraper l'exception" ; }enfin{ echo "enfin" ;

Résultats de l'exécution :

Erreur d'analyse : erreur de syntaxe, '$a' (T_VARIABLE) inattendu dans C:\Users\mao\Documents\php\index.php à la ligne 18 Erreur d'analyse PHP : erreur de syntaxe, '$a' (T_VARIABLE) inattendu dans C:\Users\mao\Documents\php\index.php à la ligne 18 [Terminé en 0,1 s]

0$a a été écrit intentionnellement, pourquoi les exceptions n'ont-elles pas été gérées ?

漂亮男人
漂亮男人

répondre à tous(3)
洪涛

Vous pouvez essayer le try{}catch(Error){} de PHP7

http://php.net/manual/fr/clas...

ParseError extends Error 
PHPzhong

Les erreurs de syntaxe sont les premières à être averties par le système et sont des exceptions au niveau du système. Dès que le système avertit, l'ensemble du programme n'a jamais été exécuté.

迷茫

Tout d'abord, vous devez comprendre que les exceptions et les erreurs sont différentes. Les exceptions sont des situations en dehors de la logique normale, tandis que les erreurs font référence à des erreurs lors de l'exécution ! Une fois qu'une erreur se produit, l'intégralité du code ne sera plus exécuté et votre programme se bloquera. Si une exception se produit, vous pouvez utiliser try catch pour l'attraper et le programme peut continuer à s'exécuter !

Évidemment, votre code contient une erreur de syntaxe, ce programme ne peut donc pas être exécuté du tout, ce qui signifie que vous avez déclenché une erreur au lieu d'une exception. Alors comment obtenir l’effet souhaité ? Nous devons d’abord résoudre le problème de syntaxe, regardez le code ci-dessous

    error_reporting(-1);
    ini_set('display_errors', 1);

    set_error_handler(function(){
        echo "error handler execute";
    }, E_ALL);

    set_exception_handler(function(){
        echo "exception handler execute";
    });

    register_shutdown_function(function(){
        echo "shutdown function execute";
    });

    try{
        echo $a;
    }catch(exception $e){
        echo "catch exception";
    }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal