php错误处理和异常

一.基础的错误处理

  1. 含义:一条消息会被发送到浏览器,这条消息带有文件名,行号以及一条描述错误的消息。
  2. 基本的错误处理:
    if(!file_exists('welcome.txt')) {
       die('file not found');
    } else {
       $file=fopen('welcome.txt', 'r');
    }

    如果没有上述的判断,会直接报错,产生warning.

二.创建自定义错误处理器

  1. 创建一个专用函数,可以在php中发生错误时调用该函数,该函数必须有能力处理至少两个参数(error level和error message),但是最多可以接受5个参数(可选:文件,行号,内容-一个数组,包含了当错误发生时在用的每个变量以及它们的值)
  2. set_error_handler('函数名'):遇到错误会触发,比如文件不存在,变量未定义等,以及自定义触发的错误(下面叙述)
function customError($error, $errstr) {
   echo "<b>Error:</b>[$errno]$errstr";
}
set_error_handler('customError');
echo($test)
//上述代码会输出
Error:[8]Undefined variable:test

三.触发错误

  1. trigger_error(errormsg,errortype):函数创建用户级别的错误消息

          参数:errormsg:规定错误消息

                    errortype:规定错误类型。E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE(默认

$test = 2;
if ($test>1) {
  trigger_error('Value must be 1 or below');
}
//以上代码会输出
Notice:Value must be 1 or below in C:\webfolder\test.php on line 6

)

四.错误报告级别

常量描述
E_WARNING非致命的run_time错误,不暂停脚本执行
E_NOTICErun_time通知,脚本发现可能有错误发生,但也可能在脚本正常运行时发生
E_USER_ERROR致命的用户生成的错误,这类似于trigger_error()设置的E_ERROR
E_USER_WARNING非致命的用户生成的警告,这类似于trigger_error()设置的E_WARNING
E_USER_NOTICE用户生成的通知,这类似于trigger_error()设置的E_NOTICE
E_RECOVERABLE_ERROR可捕获的致命错误,类似E_ERROR,但可被用户定义的处理程序捕获
E_ALL所有错误和警告,除级别E_STRICT以外

 

 

五.异常

  1. 含义:异常处理用于在指定的错误情况发生时改变脚本的正常流程,这种情况成为异常
  2. 异常触发时,会发生的情况:当前代码状态被保存。代码执行被切换到预定义的异常处理器函数。根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本。
  3. 处理方法:异常的基本使用。创建自定义的异常处理器。多个异常。重新抛出异常。设置顶层异常处理器。

六.异常的基本处理

function checkNum($number) {
  if ($number>1) {
     throw new Exception('Value must be 1 or below');
  }
  return true;
}
try {
  checkNum(2);
}catch(Exception $e){
  echo 'Message:'.$e->getMessage();
}
//上述代码会获得这样一个错误
Message:Value must be 1 or below;

七:创建一个自定义的Exception类

该类必须是exception类的一个扩展,该类继承了exception类的所有属性,您可向其添加自定义的函数

class customException extends Exception{
   public function errorTwo() {
     //定义错误处理
   }
}
//继承了Exception的属性和方法

八:多个异常

try {
  if($num>100) {
    throw new Exception1($num);
  }
  if ($num==100) {
    throw new Exception2($num);
  }
}
catch(Exception1 $e) {
  echo $e->getMessage();
}
catch(Exception2 $e) {
  echo $e->getMessage();
}

九:重新抛出异常

如果在当前try中异常没有被捕获,则它将在更高层级上查找catch代码

try{
  try{
    if ($num == 100) {
      throw new Exception($num);
    }
  }catch(Exception $e) {
    throw new Exception1($num);
  }
} catch(Exception1 $e) {
  echo $e->errorMessage();
}

十:设置顶层异常处理器

set_exception_handler()函数可设置处理所有未捕获异常的用户定义函数

function myException($exception) {
  echo "<b>Exception:</b>",$exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');

 

转载于:https://my.oschina.net/u/3104478/blog/812895

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值