1616class PHPErrors
1717{
1818 public $ logger ;
19- public static $ reportLevel = E_ALL ;
19+ public $ displayErrors = false ;
20+ public static $ errorReportLevel = E_ALL ;
2021
21- public static function enable ($ errorReportLevel = E_ALL , $ devMode = true )
22+ public function __construct ($ displayErrors = false )
23+ {
24+ $ this ->displayErrors = $ displayErrors ;
25+ }
26+
27+ public static function enable ($ errorReportLevel = E_ALL , $ displayErrors = false )
2228 {
2329 if ($ errorReportLevel != null ) {
2430 error_reporting ($ errorReportLevel );
25- self ::$ reportLevel = $ errorReportLevel ;
31+ self ::$ errorReportLevel = $ errorReportLevel ;
2632 } else {
2733 error_reporting (E_ALL );
2834 }
2935
30- if ($ devMode ) {
31- ini_set ('display_errors ' , 1 );
32- ini_set ('display_startup_errors ' , 1 );
33- } else {
34- ini_set ('display_errors ' , 0 );
35- ini_set ('display_startup_errors ' , 0 );
36- }
37-
3836 ini_set ('log_errors ' , 1 );
3937
40- $ handler = new static ();
38+ $ handler = new static ($ displayErrors );
4139 return $ handler ->register ();
4240 }
4341
@@ -55,10 +53,14 @@ public function log($type, $message)
5553 $ level = $ this ->getErrorLevel ($ type );
5654
5755 if ( $ this ->logger != null ) {
58- return $ this ->logger ->log ($ level , $ message );
56+ $ this ->logger ->log ($ level , $ message );
57+ } else {
58+ error_log ("{$ level }: {$ message }" );
5959 }
6060
61- error_log ("{$ level }: {$ message }" );
61+ if ( $ this ->displayErrors ) {
62+ print "{$ level }: {$ message }" ;
63+ }
6264 }
6365
6466 public function setLogger ($ logger )
@@ -73,43 +75,48 @@ public function handleFatalError()
7375 if (!empty ($ error )) {
7476 $ type = $ error ['type ' ];
7577
76- if ($ type & self ::$ reportLevel ) {
78+ if ($ type & self ::$ errorReportLevel ) {
7779 $ message = $ this ->formatMessage ($ error ['message ' ], $ error ['file ' ], $ error ['line ' ]);
7880
79- return $ this ->log ($ type , $ message );
81+ $ this ->log ($ type , $ message );
8082 }
8183 }
8284 }
8385
8486 public function handleError ($ type , $ message , $ file , $ line )
8587 {
86- if ($ type & self ::$ reportLevel ) {
88+ if ($ type & self ::$ errorReportLevel ) {
8789 $ message = $ this ->formatMessage ($ message , $ file , $ line );
8890
89- return $ this ->log ($ type , $ message );
91+ $ this ->log ($ type , $ message );
9092 }
9193 }
9294
9395 public function handleException (\Throwable $ exception )
9496 {
95- //Error code 需要转换成 Exception 的错误级别
96- //这里把所有的 Error 都转换成 E_ERROR 级别异常, 用来做捕获
97+ //把所有Error都当做成是致命的错误处理
9798 if ($ exception instanceof \Error) {
98- $ exception = new \ErrorException ($ exception ->getMessage (), 0 , E_ERROR , $ exception ->getFile (), $ exception ->getLine ());
99+ $ exception = new \ErrorException (
100+ $ exception ->getMessage (),
101+ $ exception ->getCode (),
102+ E_ERROR ,
103+ $ exception ->getFile (),
104+ $ exception ->getLine ()
105+ );
99106 }
100107
101- if ($ exception instanceof \ErrorException || $ exception instanceof \ Exception) {
108+ if ($ exception instanceof \Exception) {
102109 $ type = $ exception instanceof \ErrorException ? $ exception ->getSeverity () : E_ERROR ;
103110
104- if ($ type & self ::$ reportLevel ) {
111+ if ($ type & self ::$ errorReportLevel ) {
105112 $ message = $ this ->formatMessage (
106113 $ exception ->getMessage (),
107114 $ exception ->getFile (),
108115 $ exception ->getLine (),
109116 $ exception ->getTraceAsString ()
110117 );
111118
112- return $ this ->log ($ type , $ message );
119+ $ this ->log ($ type , $ message );
113120 }
114121 }
115122 }
0 commit comments