Maison > Questions et réponses > le corps du texte
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 ?
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
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é.
迷茫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";
}