配色: 字号:
PHP错误处理方法总结
2016-08-22 | 阅:  转:  |  分享 
  
PHP错误处理方法总结

在php中错误处理的方法有很多,特别是到了php5之后还提供了专门的php处理类,下面我收藏了关于PHP错误处理一些方法与程序分享给大家。

在程序中直接判断

基本的错误处理:使用die()函数第一个例子展示了一个打开文本文件的简单脚本:

?代码如下 复制代码 如果文件不存在,您会获得类似这样的错误:

Warning:fopen(welcome.txt)[function.fopen]:failedtoopenstream:?NosuchfileordirectoryinC:webfoldertest.phponline2

更多详细的

?代码如下 复制代码
???//处理:判断文件是否存在file_exists/???if(!file_exists("aa.txt")){???????echo"文件不存在";???????//不存在就退出???????exit();?//退出后,下面面的代码就不执行了???}else{???????$fp=fopen("aa.txt","r");???????//...操作完之后关闭???????fclose($fp);

???}

???echo"OK";/???//PHP处理错误的3种方法

???//第一种:使用简单的die语句

/???if(!file_exists("aa.txt")){???????????die("文件不存在。。。");//不存在就直接退出???}else{???????$fp=fopen("aa.txt","r");???????//...操作完之后关闭???????fclose($fp);

???}

???echo"OK";/???//更简单的方式???file_exists("aa.txt")ordie("文件不存在");

?> 第二种:错误处理器错误级别处理错误方式

?代码如下 复制代码
???//???/???使用error_function(error_level,error_message,???error_file,error_line,error_context)???该函数必须有能力处理至少两个参数(errorlevel和errormessage),???但是可以接受最多五个参数(可选的:file,line-number以及errorcontext):

???/

???//改写set_error_handler方法???//如果出现E_WARNING这个错误就调用my_error处理方法???set_error_handler("my_error",E_WARNING);???set_error_handler("my_error2",E_USER_ERROR);???//设置中国对应的时区???date_default_timezone_set(''PRC'');???????functionmy_error($errno,$errmes){???????????????echo"$errno";//输出错误报告级别???????echo"错误信息是:".$errmes;???????exit();???}

???functionmy_error2($errno,$errmes){???????????????//echo"错误信息是:".$errno,$errmes;???????//exit();???????//把错误信息输入到文本中保存已备查看使用到error_log()函数???????$message="错误信息是:".$errno."".$errmes;???????error_log(date("Y-m-dG:i:s")."---".$message."rn",3,"myerror.txt");//rn表示换行???}

???//打开一个文件未做任何处理

???//$fp=fopen("aa.txt","r");???//echo"OK";

???//使用自定义错误要添加触发器?这个trigger_error()函数来指定调用自定义的错误???$age=200;???if($age>150){???????//echo"年龄过大";???????//调用触发器同时指定错误级别这里需要查看帮助文档???????trigger_error("不好了出大问题了",E_USER_ERROR);???????//exit();???}

?> PHP异常处理

PHP5提供了一种新的面向对象的错误处理方法

如果异常没有被捕获,而且又没用使用set_exception_handler()作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出"UncaughtException"(未捕获异常)的错误消息。

让我们尝试抛出一个异常,同时不去捕获它:

?代码如下 复制代码 1)?{?thrownewException("Valuemustbe1orbelow");?}?returntrue;?}

//triggerexceptioncheckNum(2);?> 上面的代码会获得类似这样的一个错误:

Fatalerror:Uncaughtexception''Exception''?withmessage''Valuemustbe1orbelow''inC:webfoldertest.php:6?Stacktrace:#0C:webfwww.shanxiwang.netoldertest.php(12):?checkNum(28)#1{main}throwninC:webfoldertest.phponline6Try,throw和?catch要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。

处理处理程序应当包括:

1.Try-使用异常的函数应该位于"try"代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。2.Throw-这里规定如何触发异常。每一个"throw"必须对应至少一个"catch"3.Catch-"catch"代码块会捕获异常,并创建一个包含异常信息的对象让我们触发一个异常:

?代码如下 复制代码 1)?{?thrownewException("Valuemustbe1orbelow");?}?returntrue;?}

//在"try"代码块中触发异常try?{?checkNum(2);?//Iftheexceptionisthrown,thistextwillnotbeshown?echo''Ifyouseethis,thenumberis1orbelow'';?}

//捕获异常catch(Exception$e)?{?echo''Message:''.$e->getMessage();?}?> 上面代码将获得类似这样一个错误:

Message:Valuemustbe1orbelow

创建一个自定义的Exception类创建自定义的异常处理程序非常简单。我们简单地创建了一个专门的类,当PHP中发生异常时,可调用其函数。该类必须是exception类的一个扩展。

这个自定义的exception类继承了PHP的exception类的所有属性,您可向其添加自定义的函数。

我们开始创建exception类:

?代码如下 复制代码 getLine().''in''.$this->getFile()?.'':''.$this->getMessage().''isnotavalidE-Mailaddress'';?return$errorMsg;?}?}

$email="someone@example...com";

try?{?//checkif??if(filter_var($email,FILTER_VALIDATE_EMAIL)===FALSE)?{?//throwexceptionifemailisnotvalid?thrownewcustomException($email);?}?}

catch(customException$e)?{?//displaycustommessage?echo$e->errorMessage();?}?> 这个新的类是旧的exception类的副本,外加errorMessage()函数。正因为它是旧类的副本,因此它从旧类继承了属性和方法,我们可以使用exception类的方法,比如getLine()、getFile()以及getMessage()。



献花(0)
+1
(本文系网络学习天...首藏)