web-dev-qa-db-fra.com

PHP: Déclencher une erreur fatale?

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.

29
DudeOnRock

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

45
bwoebi

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

11
Brad Kent
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.

2
AliN11