Je voudrais pouvoir lancer une erreur fatale et inaccessible dans ma classe php lorsqu'un utilisateur de ma classe en abuse pour quelque chose que je n'avais pas l'intention. Je ne veux pas qu'il/elle puisse récupérer avec une clause catch. Je connais trigger_error
, mais je ne peux que lui faire émettre des avertissements ou des notifications.
E_USER_ERROR est la constante adaptée.
trigger_error("Fatal error", E_USER_ERROR);
Voir aussi le premier exemple de page de manuel et liste des erreurs PHP (seuls ceux commençant par E_USER * peuvent être émis par trigger_error ).
Remarque: si vous utilisez un gestionnaire d'erreurs personnalisé (voir set_error_handler ) E_USER_ERROR
ne s'arrêtera/quittera/ne mourra que si le gestionnaire d'erreurs retourne false
bref: votre gestionnaire d'erreurs personnalisé détermine efficacement si E_USER_ERROR
est traité comme fatal
debug_print_backtrace();
trigger_error("As much information as you can provide, please", E_USER_ERROR);
exit();
exit () termine complètement le script PHP. Plus vous pouvez fournir d'informations aux utilisateurs ou aux développeurs sur l'erreur, mieux c'est. Les codes d'erreur sont dépassés.
Edit: l'utilisation de E_USER_ERROR devrait de toute façon mettre fin au script, donc déplacé debug_print_backtrace () avant trigger_error ().
Si vous utilisez PHP 7 ou supérieur, Error class fonctionne aussi:
$flag = false;
try {
if ($flag == false) {
throw new Error('An error occured');
}
} catch (Error $e) {
echo $e->getMessage();
}
Si vous mettez throw new Error('An error occured');
en dehors du Try Catch
, Vous obtiendrez une erreur fatale.