PHP 中 try{}catch{}语句概述
1.PHP5 添加了类似于其它语言的异常处理模块. 在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获.(注: 一定要先抛才能获取)
2. 需要进行异常处理的代码都必须放入 try 代码块内, 以便捕获可能存在的异常.
3. 每一个 try 至少要有一个与之对应的 catch.
4. 使用多个 catch 可以捕获不同的类所产生的异常.
5. 当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时, PHP 代码就会在跳转到最后一个 catch 的后面继续执行.
6. 当然, PHP 允许在 catch 代码块内再次抛出 (throw) 异常.
7. 当一个异常被抛出时, 其后 (译者注: 指抛出异常时所在的代码块) 的代码将不会继续执行, 而 PHP 就会尝试查找第一个能与之匹配的 catch.
8. 如果一个异常没有被捕获, 而且又没用使用 set_exception_handler() 作相应的处理的话, 那么 PHP 将会产生一个严重的错误, 并且输出 Uncaught Exception ... (未捕获异常)的提示信息.
手动抛出和捕获异常
- // 使用 think 自带异常类抛出异常
- throw new \think\Exception('异常消息', 10006);
助手函数简化异常的代码
- // 使用助手函数抛出异常
- exception('异常消息', 10006);
如果需要抛出自定义异常, 可以使用:
- // 抛出自定义异常
- exception('异常消息', 10006,'\app\common\exception\NotFoundException');
手动捕获异常方式是使用 try-catch, 例如:
- try {
- // 这里是主体代码
- } catch (ValidateException $e) {
- // 这是进行验证异常捕获
- return JSON($e->getError());
- } catch (\Exception $e) {
- // 这是进行异常捕获
- return JSON($e->getMessage());
- }
可以使用 PHP 的异常捕获进行必要的处理, 但需要注意一点,
在异常捕获中不要使用 think\Controller 类的 error,success 和 redirect 方法,
因为上述三个方法会抛出 HttpResponseException 异常, 从而影响正常的异常捕获, 例如:
- try{
- Db::name('user')->find();
- $this->success('执行成功!');
- }catch(\Exception $e){
- $this->error('执行错误');
- }
应该改成
- try{
- Db::name('user')->find();
- }catch(\Exception $e){
- $this->error('执行错误');
- }
- $this->success('执行成功!');
来源: http://www.bubuko.com/infodetail-2997350.html