PHP 异常处理浅析 [ 2.0 版本 ]
PHP 的异常类继承自 Throwable 接口类,2个经常使用的类:
Error,Exception。
看下Throwable代码:
interface Throwable
{
/**
* 获取异常信息
*/
public function getMessage();
/**
* 获取异常码
*/
public function getCode();
/**
* 获取抛出异常的文件
*/
public function getFile();
/**
* 获取抛出异常的代码行号
*/
public function getLine();
/**
* 获取异常堆栈跟踪 返回数组
*/
public function getTrace();
/**
* 获取异常堆栈跟踪 返回字符串
*/
public function getTraceAsString();
/**
* 继承 Throwable接口的异常类 实例化传入的第三个参数
*/
public function getPrevious();
/**
* 魔术方法
*/
public function __toString();
}
举例说明 Exception
class Exception implements Throwable {
protected $message;
protected $code;
protected $file;
protected $line;
/**
* 不允许克隆 会抛异常
*/
final private function __clone() { }
/**
* 实例化.
*/
public function __construct($message = "", $code = 0, Throwable $previous = null) { }
/**
* 魔术方法
*/
public function __wakeup() { }
}
关于 $previous 在 stackoverflow 中 找到解释,
try {
throw new FooException('Foo exception');
} catch (FooException $e) {
$code = 1;
throw new BarException('Bar exception', $code, $e);
}
看 yii2 的异常类 就是子类继承父类形成一个树,这样划分的好处很多。方便查找错误,一目了然。
看下分布图:

异常处理 就是使用 try catch finally,finally 我是用的少。意思就是最后总会执行(除非没有抓到异常错误)。不过有点要注意
抛出的 Error 异常,通过 catch Exception 是抓不到的。
try{
throw new \Error('Error');
}catch (\Exception $e){
echo 'Exception <br>';
}finally{
echo 'finally <br>';
}
通常抛出Error类错误就是代码有问题了。但是若果想抓到可以这样写:
try{
throw new \Error('Error');
}catch (\Throwable $e){
echo 'Throwable <br>';
}catch (\Exception $e){
echo 'Exception <br>';
}finally{
echo 'finally <br>';
}
小叮当的肚兜
注册时间:2016-10-31
最后登录:2小时前
在线时长:97小时48分
最后登录:2小时前
在线时长:97小时48分
- 粉丝13
- 金钱50910
- 威望270
- 积分54580
共 1 条评论
``````````````