您的位置:首页 > 编程语言 > PHP开发

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

2016-11-30 13:52 549 查看
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');


定义了异常处理器之后,在脚本中的异常将会交由自定义的异常处理函数解决;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息