异常处理

和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面,如下图所示:

只有在调试模式下面才能显示具体的错误信息,如果在部署模式下面,你可能看到的是一个统一错误的提示文字,如果你试图在部署模式下访问一个不存在的模块或者操作,会发送404错误。
调试模式下面一旦系统发生严重错误会自动抛出异常,也可以用ThinkPHP定义的throw_exception方法手动抛出异常。

throw_exception 抛出异常
用法 throw_exception($msg, $type='ThinkException', $code=0)
参数 msg(必须):要抛出的异常信息,字符串
type(可选):异常类型,默认为ThinkException,如果异常类型不存在,则会调用系统的halt方法直接输出错误信息。
code(可选):异常代码,默认为0
返回值

下面是throw_exception函数的一些使用例子:

throw_exception('新增失败');
throw_exception('信息录入错误','InfoException');

 同样也可以使用throw 关键字来抛出异常,下面的写法是等效的:

throw new ThinkException('新增失败');
throw new InfoException('信息录入错误');

 如果需要,我们建议在项目的类库目录下面增加Exception目录用于专门存放异常类库,以更加精确地定位异常。

 

Exception类需继承自ThinkException,如:

abstract class CommonException extends ThinkException

 在其他文件用的时候可以这样用:

try {
				$redisObj = D('Redis.RdUserfav');
				$redisObj->clearUserCacheVersion($uid, C('CACHE_VERSION_ME'));
				$redisObj->clearUserCacheVersion($uid, C('CACHE_VERSION_PRICEDOWN'));
			} catch (RedisConnException $e) {
				//do nothing.
			}

 这样可以在连接Redis失败时,不做任何操作

如果你要捕获通用的exception,同时又要捕获其他自定义的异常,必须把自定义的异常放在前面

1、基本语法
        try{
            //可能出现错误或异常的代码
            //catch 捕获  Exception是php已定义好的异常类
        } catch(Exception $e){
            //对异常处理,方法:
                //1、自己处理
                //2、不处理,将其再次抛出
        }
2、处理处理程序应当包括:
    1. Try - 使用异常的函数应该位于 "try"  代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
    2. Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
    3. Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
<?php
  //创建可抛出一个异常的函数
  function checkNum($number){
      if($number>1){
          throw new Exception("Value must be 1 or below");
      }
      return true;
  }
  
 //在 "try" 代码块中触发异常
 try{
     checkNum(2);
     //如果异常被抛出,那么下面一行代码将不会被输出
     echo 'If you see this, the number is 1 or below';
     }catch(Exception $e){
     //捕获异常
     echo 'Message: ' .$e->getMessage();
 }
 ?>
原文地址:https://www.cnblogs.com/Hebe/p/3210791.html