这篇文章将为大家详细讲解有关谈谈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中谈谈的异常处理机制