有两种方式可以在 PHP 中以异常的方式处理错误:
① PHP 内置的 ErrorException类(也是 Exception 类的子类)
1 <?php 2 function exception_error_handler($errno, $errstr, $errfile, $errline){ 3 throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 4 } 5 6 set_error_handler(‘exception_error_handler‘); 7 8 try{ 9 //出发异常 10 echo gettype(); 11 }catch(Exception $e){ 12 echo $e->getMessage(); 13 }
输出:
用过这种方式把警告信息以异常信息输出出来了。
② 自定义异常类来处理 PHP 中的错误
1 <?php 2 class ErrorToException extends Exception{ 3 public static function handler($errno, $errstr){ 4 throw new self($errstr, $errno); 5 } 6 } 7 8 set_error_handler(array(‘ErrorToException‘, ‘handler‘)); 9 10 try{ 11 //触发错误,未定义的变量,产生通知级别的错误 12 echo $test; 13 }catch(ErrorToException $e){ 14 echo $e->getMessage(); 15 }
输出:
还可以使用 set_error_handler 设定错误级别:
1 <?php 2 class ErrorToException extends Exception{ 3 public static function handler($errno, $errstr){ 4 throw new self($errstr, $errno); 5 } 6 } 7 8 set_error_handler(array(‘ErrorToException‘, ‘handler‘)); 9 //设定错误级别,例如只有警告级别的错误才以异常的形式进行捕获 10 set_error_handler(array(‘ErrorToException‘, ‘handler‘), E_USER_WARNING|E_WARNING); 11 12 try{ 13 //触发错误,未定义的变量,产生通知级别的错误 14 echo $test; 15 }catch(ErrorToException $e){ 16 echo $e->getMessage(); 17 }
输出:
也就是说,通知级别的错误不交给自定义异常类来处理。
trigger_error 也能触发异常:
1 <?php 2 header(‘content-type:text/html; charset=utf-8‘); 3 4 class ErrorToException extends Exception{ 5 public static function handler($errno, $errstr){ 6 throw new self($errstr, $errno); 7 } 8 } 9 10 set_error_handler(array(‘ErrorToException‘, ‘handler‘)); 11 //设定错误级别,例如至哟哟警告级别的错误才以异常的形式进行捕获 12 set_error_handler(array(‘ErrorToException‘, ‘handler‘), E_USER_WARNING|E_WARNING); 13 14 try{ 15 //触发错误,未定义的变量,产生通知级别的错误 16 echo $test; 17 echo ‘<hr>‘; 18 //gettype(); 19 echo ‘<hr>‘; 20 trigger_error(‘test‘, E_USER_WARNING); 21 }catch(ErrorToException $e){ 22 echo ‘异常‘; 23 echo $e->getMessage(); 24 }
输出:
时间: 2024-10-20 22:44:07