• 技术文章 >后端开发 >PHP问题

    php无法捕获异常怎么办

    coldplay.xixicoldplay.xixi2020-09-05 11:25:31原创995

    解决php无法捕获异常的方法:首先使用函数【try,catch】输出异常完整信息;然后定义异常,代码为【catch(FileExistException $e)】;最后重抛异常给上层,代码为【catch(Exception $e)】。

    【相关学习推荐:php图文教程

    解决php无法捕获异常的方法:

    1、首先是try,catch

    <?php
    $path = "D:\\in.txt";
    try           //检测异常
    {
     file_open($path);
    }
    catch(Exception $e)        //捕获异常
    {
     echo $e->getMessage();
    }
    function file_open($path)
    {
     if(!file_exists($path))       //如果文件无法找到,抛出异常对象
     {
      throw new Exception("文件无法找到", 1);
     }
     
     if(!fopen($path, "r"))       //如果文件无法打开,抛出异常对象
     {
      throw new Exception("文件无法打开", 2);
     }
    }
    ?>

    注意用$e->getMessage()输出异常信息.

    2、输出异常完整信息

    <?php
    $path = "D:\\in.txt";
    try
    {
     file_open($path);        //尝试打开文件
    }
    catch(Exception $e)
    {
     echo "异常信息:".$e->getMessage()."\n";   //返回用户自定义的异常信息
     echo "异常代码:".$e->getCode()."\n";      //返回用户自定义的异常代码
     echo "文件名:".$e->getFile()."\n";                    //返回发生异常的PHP程序文件名
     echo "异常代码所在行".$e->getLine()."\n";               //返回发生异常的代码所在行的行号
     echo "传递路线:";
     print_r($e->getTrace());                     //以数组形式返回跟踪异常每一步传递的路线
     echo $e->getTraceAsString();              //返回格式化成字符串的getTrace函数信息
    }
    function file_open($path)
    {
     if(!file_exists($path))        //如果文件不存在,则抛出错误
     {
      throw new Exception("文件无法找到", 1);
     }
     
     if(!fopen($path, "r"))
     {
      throw new Exception("文件无法打开", 2);
     }
    }
    ?>

    3、扩展异常,即自定义异常

    <?php
    class FileExistsException extends Exception{}  //用于处理文件不存在异常的类
    class FileOpenException extends Exception{}  //用于处理文件不可读异常的类
    $path = "D:\\in.txt";
    try
    {
     file_open($path);
    }
    catch(FileExistsException $e)    //如果产生FileExistsException异常则提示用户确认文件位置
    {
     echo "程序在运行过程中发生了异常:".$e->getMessage()."\n";
     echo "请确认文件位置。";
    }
    catch(FileOpenException $e)    //如果产生FileOpenException异常则提示用户确认文件的可读性
    {
     echo "程序在运行过程中发生了异常:".$e->getMessage()."\n";
     echo "请确认文件的可读性。";
    }
    catch(Exception $e)
    {
     echo "[未知异常]";
     echo "异常信息:".$e->getMessage()."\n";   //返回用户自定义的异常信息
     echo "异常代码:".$e->getCode()."\n";      //返回用户自定义的异常代码
     echo "文件名:".$e->getFile()."\n";                    //返回发生异常的PHP程序文件名
     echo "异常代码所在行".$e->getLine()."\n";    //返回发生异常的代码所在行的行号
     echo "传递路线:";
     print_r($e->getTrace());                //以数组形式返回跟踪异常每一步传递的路线
     echo $e->getTraceAsString();              //返回格式化成字符串的getTrace函数信息
    }
    function file_open($path)
    {
     if(!file_exists($path))
     {
      throw new FileExistsException("文件无法找到", 1);  //抛出FileExistsException异常对象
     }
     
     if(!fopen($path, "r"))
     {
      throw new FileOpenException("文件无法打开", 2);   //抛出FileOpenException异常对象
     }
    }
    ?>

    4、重抛异常给上层

    <?php
    class FileExistsException extends Exception{}  //用于处理文件不存在异常的类
    class FileOpenException extends Exception{}  //用于处理文件不可读异常的类
    $path = "D:\\in.txt";
    try
    {
     file_open($path);
    }
    catch(FileExistsException $e)    //如果产生FileExistsException异常则提示用户确认文件位置
    {
     echo "程序在运行过程中发生了异常:".$e->getMessage()."\n";
     echo "请确认文件位置。";
    }
    catch(FileOpenException $e)    //如果产生FileOpenException异常则提示用户确认文件的可读性
    {
     echo "程序在运行过程中发生了异常:".$e->getMessage()."\n";
     echo "请确认文件的可读性。";
    }
    catch(Exception $e)
    {
     echo "[未知异常]";
     echo "异常信息:".$e->getMessage()."\n";   //返回用户自定义的异常信息
     echo "异常代码:".$e->getCode()."\n";      //返回用户自定义的异常代码
     echo "文件名:".$e->getFile()."\n";                    //返回发生异常的PHP程序文件名
     echo "异常代码所在行".$e->getLine()."\n";               //返回发生异常的代码所在行的行号
     echo "传递路线:";
     print_r($e->getTrace());                   //以数组形式返回跟踪异常每一步传递的路线
     echo $e->getTraceAsString();              //返回格式化成字符串的getTrace函数信息
    }
    function file_open($path)
    {
     try
     {
      if(!file_exists($path))
      {
       throw new FileExistsException("文件无法找到", 1);
      }
      
      if(!fopen($path, "r"))
      {
       throw new FileOpenException("文件无法打开", 2);
      }
     }
     catch(Exception $e)        //捕获异常
     {
      echo "file_open函数在运行过程中出现异常";
      throw $e;         //重掷异常
     }
    }
    ?>

    相关学习推荐:php编程(视频)

    以上就是php无法捕获异常怎么办的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php 捕获异常
    上一篇:php如何生成不重复的序列号 下一篇:php怎样将数组元素转换成变量
    大前端线上培训班

    相关文章推荐

    • python动态捕获异常• PHP捕获异常的代码• php怎么全局捕获异常• java怎么捕获异常

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网