php基础系列----8php中错误和异常的处理

php提供了对异常和错误的处理机制,通过这些机制可以让程序更加健壮;

php中的错误处理机制:

1:常见的错误类型

    E_WARNING           警告,非致命的错误。不暂停脚本执行。
    E_NOTICE            通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。
    E_ERROR           致命的错误,会导致程序终止执行
    E_USER_ERROR          致命的用户生成的错误。类似于使用 PHP 函数 trigger_error() 设置的 E_ERROR。
    E_USER_WARNING        非致命的用户生成的警告。类似于使用 PHP 函数 trigger_error() 设置的 E_WARNING。
    E_USER_NOTICE         用户生成的通知。类似于使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
    E_RECOVERABLE_ERROR      可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。
    E_ALL             所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分)

2:错误处理方式

通过php函数:

1:die()函数:

支持输出一段提示信息,终止程序的运行:

die("程序出现错误");
2:exit()函数:

同die()函数,可以在输出一段提示信息之后终止程序的执行;

exit("程序出现错误");
3:自定义错误处理器:

如果觉得系统对于错误的处理满足不了自己的需求,那么可以自定义错误处理器:

指定错误处理函数:

//自定义错误处理器,通过set_error_handler()函数指定错误处理函数;
set_error_handler(myErrorHandler);

自定义错误处理函数:

myErrorHandler(error_level,error_message,error_file,error_line,error_context)
//特别注意:前两个是必须要有的参数,之后的参数则是可选的;

error_level     //必需。为用户定义的错误规定错误报告级别。必须是一个数字。
error_message   //必需。为用户定义的错误规定错误消息。
error_file    //可选。规定错误发生的文件名。
error_line    //可选。规定错误发生的行号。
error_context   //可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
4:调整错误的显示和记录:

php同样支持队错误信息的显示与否的设置,以及错误信息的记录设置;

1:设置是否显示错误提示信息:

  1:通过display_errors:设置是否输出错误信息:

ini_set("display_errors",0/1/on/off): //0不显示,1显示;

  2:在php.ini的配置文件里面设置display_errors = on/off:选择是否输出错误信息;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;
3:一般推荐在开发过程中打开错误提示,在正式部署上线只后就关闭这个功能;

2:输出错误报告级别:

  1:通过error_reporting:设置错误报告级别

如:
ini_set("error_reporting",E_ALL&~E_NOTICE)

  2:在php.ini的配置文件中设置error_reporting的常量值;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;
3:常量值由上述错误常量和逻辑表达式组成;

3:设置是否记录错误日志

  1:通过log_errors设置是否将错误信息记录到日志中;

如:
ini_set("log_errors",0/1);

  2:在php.ini的配置文件里,设置log_errors的值;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;

4:错误信息记录位置:

  1:通过error_log设置记录错误信息的位置:

如:
ini_set("error_log","log/mylog.log");

  2:在php.ini的配置文件里,设置error_log的值;

注:
1:第一种方式设置后只会在当前脚本文件起作用;
2:第二种方式设置后会在全局有效;
3:记录位置可以是自定义的位置,也可以是记录到系统日志:syslog;

4:trigger_error()函数的用法:

ok,谁编写程序肯定都不希望自己的程序动不动出错对吧?,但是你管得了自己还能管得了别人吗?
对,说的就是用这个软件的人,在用户输入错误的时候,无论是故意挑衅还是无意为之,我们都必须要能够进行提示;这时候就需要trigger_error();函数;
trigger_error()函数的作用就在于可以人为的触发用户级别的错误;
这个函数要求有两个参数,
第一个参数是提示信息;是必须的参数;
第二个参数是错误级别:是可选的参数,默认是notice级别;

php中的异常的处理机制:

程序运行过程中除过错误以外还有可能发生异常;看下php对异常的处理:

1:抛出异常:

在有可能出现异常的地方通过throw关键字即可抛出异常:
如:


function splitefunction(){
    $i = 0;
    if($i == 0){
    //在此处直接抛出异常,如果外面能够捕获该异常将能够处理这次异常;
        throw new Exception("error  msg");
    }
}

splitefunction();

2:通过try catch来处理异常

像上面那样,如果外部能够捕获并处理异常最好,但是如果不能的话那程序将会终止执行;
有些时候也需要进行个性化的处理,那么就需要主动捕获异常并处理:
如:


function splitefunction(){
    $i = 0;
    if($i == 0){
    //在此处直接抛出异常,如果外面能够捕获该异常将能够处理这次异常;
        throw new Exception("error  msg");
    }
}

//在这里通过try  catch捕获异常并处理
try{
    splitefunction();
}catch(Exception $e){
    echo $e->getMessage();
}

3:多级异常处理:

多级处理是通过多个catch块进行的:
比如:

function splitefunction(){
    $i = 0;
    if($i == 0){
    //在此处直接抛出异常,如果外面能够捕获该异常将能够处理这次异常;
    //此处假设抛出exception1的异常;
        throw new Exception1("error  msg");
    }
}

//在这里通过try  catch捕获异常并处理
try{
    splitefunction();
}catch(Exception1 $e){
    echo $e->getMessage();
}catch(Exception $e){
    echo $e->getMessage();
}

通过多个catch块可以捕获多级异常信息,但是要求从上至下异常的级别应该由小到大;

获取异常信息

$e->getMessage():获取异常信息;
$e->getFile():返回发生异常的文件名;
$e->getLine():返回发生异常的代码行号
$e->getTrace():返回错误栈;

自定义异常处理器:

自定义异常处理函数:

function myException($exception)
{
    echo "Exception: " . $exception->getMessage();
}

自定义异常处理器:

set_exception_handler('myException');

定义了异常处理器之后,在脚本中的异常将会交由自定义的异常处理函数解决;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值