recherche

Maison  >  Questions et réponses  >  le corps du texte

PHP n'a pas réussi à capturer l'erreur d'analyse ?

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 ?

漂亮男人漂亮男人2779 Il y a quelques jours442

répondre à tous(3)je répondrai

  • PHP中文网

    PHP中文网2017-05-16 13:02:20

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

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

    ParseError extends Error 

    répondre
    0
  • PHPz

    PHPz2017-05-16 13:02:20

    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é.

    répondre
    0
  • 迷茫

    迷茫2017-05-16 13:02:20

    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";
        }

    répondre
    0
  • Annulerrépondre