web-dev-qa-db-ja.com

PHP:致命的なエラーを引き起こしますか?

私のクラスのユーザーが意図しない何かのために悪用したときに、phpクラスで致命的でキャッチできないエラーをスローできるようにしたいと思います。彼/彼女がcatch節で回復できるようにしたくない。 trigger_errorについては知っていますが、警告や通知を出すことしかできません。

29
DudeOnRock

E_USER_ERRORは適切な定数です。

trigger_error("Fatal error", E_USER_ERROR);

manual page および list of PHP Errors の最初の例も参照してください(E_USER *で始まるもののみがtrigger_errorから発行される場合があります) )。

45
bwoebi

注:カスタムエラーハンドラーを使用している場合( set_error_handler を参照)E_USER_ERRORエラーハンドラがfalseを返さない限り、停止/終了/終了しません

簡単に言うと、カスタムエラーハンドラーはE_USER_ERRORは致命的として扱われます

11
Brad Kent
debug_print_backtrace();
trigger_error("As much information as you can provide, please", E_USER_ERROR);
exit();

exit()は、PHPスクリプトを完全に終了します。エラーについてユーザーまたは開発者に提供できる情報が多いほど、エラーは改善されます。エラーコードはパスです。

編集:E_USER_ERRORを使用するとスクリプトが強制終了されるため、debug_print_backtrace()をtrigger_error()の前に移動しました。

PHP 7以降)を使用している場合、 Error クラスも機能します。

_$flag = false;

try {
    if ($flag == false) {
        throw new Error('An error occured');
    }
} catch (Error $e) {
    echo $e->getMessage();
}
_

_Try Catch_の外にthrow new Error('An error occured');を置くと、致命的なエラーが発生します。

2
AliN11