如果 $error_level 大於或等於 E_USER_ERROR,函式 trigger_error 將會終止腳本。
如果您編寫自己的錯誤處理器,您將必須自行處理這些問題。
範例中,我們假設全域 LOG 常數指向一個 PSR-2 紀錄介面。
<?php
set_error_handler( function ($errno, $errstr, $errfile, $errline) {
if ( 0 === error_reporting() ) {
return false;
}
switch ($errno) {
default:
LOG->error( "未知的錯誤類型: [$errno] $errstr", [ 'file' => $errfile, '@' => $errline ] );
exit(1);
case E_USER_ERROR: // fall through
case E_WARNING: // 將 PHP 警告視為錯誤
LOG->error( $errstr, [ 'file' => $errfile, '@' => $errline ] );
exit(1);
case E_USER_DEPRECATED:
case E_DEPRECATED:
LOG->error( "已棄用 $errstr", [ 'file' => $errfile, '@' => $errline ] );
break;
case E_USER_WARNING: // fall through
case E_NOTICE: // 將 PHP 通知視為警告
LOG->warning( $errstr, [ 'file' => $errfile, '@' => $errline ] );
break;
case E_USER_NOTICE:
LOG->notice( $errstr, [ 'file' => $errfile, '@' => $errline ] );
break;
case E_ERROR: // fall through
case E_RECOVERABLE_ERROR:
LOG->critical( $errstr, [ 'file' => $errfile, '@' => $errline ] );
exit(1);
}
return true;
} );
?>