PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

时间:2022-01-13 19:29:36

有两种方式可以在 PHP 中以异常的方式处理错误:

① PHP 内置的 ErrorException类(也是 Exception 类的子类)

 <?php
function exception_error_handler($errno, $errstr, $errfile, $errline){
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
} set_error_handler('exception_error_handler');

try{
//出发异常
echo gettype();
}catch(Exception $e){
echo $e->getMessage();
}

输出:

PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

用过这种方式把警告信息以异常信息输出出来了。

自定义异常类来处理 PHP 中的错误

 <?php
class ErrorToException extends Exception{
public static function handler($errno, $errstr){
throw new self($errstr, $errno);
}
} set_error_handler(array('ErrorToException', 'handler')); try{
//触发错误,未定义的变量,产生通知级别的错误
echo $test;
}catch(ErrorToException $e){
echo $e->getMessage();
}

输出:

PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

还可以使用 set_error_handler 设定错误级别:

 <?php
class ErrorToException extends Exception{
public static function handler($errno, $errstr){
throw new self($errstr, $errno);
}
} set_error_handler(array('ErrorToException', 'handler'));
//设定错误级别,例如只有警告级别的错误才以异常的形式进行捕获
set_error_handler(array('ErrorToException', 'handler'), E_USER_WARNING|E_WARNING); try{
//触发错误,未定义的变量,产生通知级别的错误
echo $test;
}catch(ErrorToException $e){
echo $e->getMessage();
}

输出:

PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

也就是说,通知级别的错误不交给自定义异常类来处理。

trigger_error 也能触发异常:

 <?php
header('content-type:text/html; charset=utf-8'); class ErrorToException extends Exception{
public static function handler($errno, $errstr){
throw new self($errstr, $errno);
}
} set_error_handler(array('ErrorToException', 'handler'));
//设定错误级别,例如至哟哟警告级别的错误才以异常的形式进行捕获
set_error_handler(array('ErrorToException', 'handler'), E_USER_WARNING|E_WARNING); try{
//触发错误,未定义的变量,产生通知级别的错误
echo $test;
echo '<hr>';
//gettype();
echo '<hr>';
trigger_error('test', E_USER_WARNING);
}catch(ErrorToException $e){
echo '异常';
echo $e->getMessage();
}

输出:

PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误