PHP中谈谈的异常处理机制

  介绍

这篇文章将为大家详细讲解有关谈谈PHP中的异常处理机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强> 1,异常概述

异常(异常)是一种错误处理机制,用于在指定的错误发生时改变脚本的正常流程。

当异常被触发时,当前代码状态被保存,代码执行被切换到预定义的异常处理器函数(如果有)

根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本

<强> 2,异常的基本使用

当异常被抛出时,其后的代码不会继续执行,PHP会尝试查找匹配的“catch"代码块。

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

//create  function  with  an 例外   function  checkNum(美元){   ,如果(number>美元;1){   throw 才能;new 异常(“Value  must  be  1,趁机below");   ,}   }//trigger 例外   checkNum (2);

上面的代码会获得类似这样的一个错误:

致命错误:未捕获异常& # 39;例外# 39;消息& # 39;值必须是1或以下# 39;在C: \ webfolder \测试。php: 6
堆栈跟踪:# 0 C: \ webfolder \ test.php (12): checkNum(28) # 1}{主要在C: \ webfolder \ test.php> set_error_handler(函数(){   ,throw  new 例外(& # 39;错误! & # 39;);   });

<强> 3,尝试,抛出和捕获

正确的处理程序应当包括:

尝试——使用异常的函数应该位于“try"代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

扔——这里规定如何触发异常。每一个“throw"必须对应至少一个“catch"

抓住——“catch"代码块会捕获异常,并创建一个包含异常信息的对象

//创建可抛出一个异常的函数   function  checkNum(美元){   ,如果(number>美元;1){   throw 才能;new 异常(“Value  must  be  1,趁机below");   ,}   }//在,“try",代码块中触发异常   尝试{   ,checkNum (2);   }捕捉(Exception  $ e),{,//捕获异常   ,echo  & # 39;文件:,& # 39;。e→美元getFile() # 39;公司,行:,& # 39;。e→美元getLine() # 39;公司& lt; br> & # 39;;   ,死(& # 39;信息:,& # 39;。e→美元getMessage ());   }

上面代码将获得类似这样一个错误:

文件:E: \ webdev \ www \ pdo \ 3。php: 7
信息:值必须是1或低于

代码解析:创建checkNum()函数。它检测数字是否大于1。如果是,则抛出一个异常。在“try"代码块中调用checkNum(),函数checkNum()函数中的异常被抛出,“catch"代码块接收到该异常,并创建一个包含异常信息的对象(e)美元。通过从这个例外对象输出来自该异常的错误消息

不过,为了遵循“每个扔必须对应一个抓”的原则,可以设置一个顶层的异常处理器来处理漏掉的错误,见第7点

<强> 4,创建自定义的异常处理器

创建一个专门的类,当PHP中发生异常时,可调用其函数。该类必须是异常类的一个扩展。这个自定义的异常类继承了PHP的异常类的所有属性,可向其添加自定义的函数。

class  customException  extends 异常{   ,public  function  errorMessage () {   return 才能;& # 39;Error 提醒line  & # 39;。$ this→getLine() # 39;公司,& # 39;拷贝。$ this→getFile() # 39;公司:,& lt; b> & # 39;。$ this→getMessage() # 39;公司& lt;/b>, is  not  a  valid  E-Mail 地址# 39;;   ,}   }   时间=美元email “someone@example…com";   尝试{   ,//使用PHP过滤器验证邮箱有效性   ,如果(使用filter_var(电子邮件、美元,FILTER_VALIDATE_EMAIL),===, FALSE) {,   throw 才能;new  customException(电子邮件);   ,}   }catch  (customException  $ e) {   ,echo  $ e→errorMessage ();   }

这个新的类是旧的异常类的副本,外加errorMessage()函数。正因为它是旧类的副本,因此它从旧类继承了属性和方法,我们可以使用异常类的方法,比如getLine (), getFile()以及getMessage ()。

上面的代码抛出了一个异常,并通过一个自定义的异常类来捕获它:创建errorMessage()函数。如果电子邮件地址不合法,则该函数返回一条错误消息

PHP中谈谈的异常处理机制