zoukankan      html  css  js  c++  java
  • 异常处理

    和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();
     }
     ?>
    
  • 相关阅读:
    作为产品经理为什么选择开源GIS
    arcpy自动发布服务02
    rclone
    MinIO+Keepalived+Nginx
    Mysql-用户管理
    docker-compose
    docker-制造镜像
    docker-数据卷
    docker-容器操作
    docker-镜像操作
  • 原文地址:https://www.cnblogs.com/Hebe/p/3210791.html
Copyright © 2011-2022 走看看