首页 后端开发 php教程 php中的异常处理、错误的抛出及错误回调函数

php中的异常处理、错误的抛出及错误回调函数

Jul 25, 2016 am 09:03 AM

  1. try{

  2. // you codes that maybe cause an error
  3. }catch(Exception $err){ // 这个错误对象需要声明类型, Exception 是系统默认异常处理类

  4. echo $err->getMessage();
  5. }
  6. //thrown 可以抛出一个异常,如:

  7. thrown new Exception('an error');
复制代码

一个例子:

  1. try {

  2. if ( empty( $var1 ) ) throw new NotEmptyException();
  3. if ( empty( $var2 ) ) throw new NotEmptyException();
  4. if ( ! preg_match() ) throw new InvalidInputException();
  5. $model->write();

  6. $template->render( 'success' );
  7. } catch ( NotEmptyException $e ) {
  8. $template->render( 'error_empty' );
  9. } catch ( InvalidInputException $e ) {
  10. $template->render( 'error_preg' );
  11. }
复制代码

Exception 类的结构:其中大部分方法都是 禁止改写的(final ) Exception { /* 属性 */ protected string $message ; protected int $code ; protected string $file ; protected int $line ; /* 方法 */ public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] ) final public string getMessage ( void ) //异常抛出的信息 final public Exception getPrevious ( void ) //前一异常 final public int getCode ( void ) //异常代码,这是用户自定义的 final public string getFile ( void ) //发生异常的文件路劲 final public int getLine ( void ) //发生异常的行 final public array getTrace ( void ) //异常追踪信息(array) final public string getTraceAsString ( void ) //异常追踪信息(string) public string __toString ( void ) //试图直接 将异常对象当作字符串使用时调用子函数的返回值 final private void __clone ( void ) //克隆异常对象时调用 }

扩展异常类

try-catch 可以有多个 catch 子句,从第一个 catch 子句开始,如果子句内的 异常变量 类型匹配 thrown 语句抛出的异常类型,则该子句会被执行而不再执行其他catch子句,否则继续尝试下一个 catch 子句,由于Exception 是所有 异常类的基类,因此抛出的异常都会与他匹配 ,如果需要根据不同异常类型使用不同的处理方法,应该将 Exception 类型的 catch 子句放到最后。

Exception 是所有异常的基类,可以根据实际需要扩展异常类

  1. calss MyException extends Exception{

  2. public errType = 'default';
  3. public function __construct($errType=''){
  4. $this->errType = $errType;
  5. }
  6. }
  7. try{ // you codes that maybe cause an error

  8. thrown new MyException('an error');
  9. }catch(MyException $err){ // 这个错误对象需要声明类型
  10. echo $err->errType();
  11. }catch(ErrorException $err){ //ErrorException 是 PHP 5 增加的异常类,继承于 Exception
  12. echo 'error !';
  13. }catch(Exception $err){
  14. redirect('/error.php');
  15. }
复制代码

你可能会在 catch 子句中判断异常的类型,或者根据 code 等信息来决定是否处理异常,如果你卸载 catch 子句的代码无法适当的处理捕获的异常,你可以在 catch 子句内继续 抛出异常。 三、Exception 异常的回调函数 set_exception_handler(callback functionName) //发生 Exception 或其 子类的 异常是会调用此函数 function exceptionHandlerFun($errObj){ // Exception 异常的回调函数 只有一个参数,就是抛出的异常对象。 //....... }

Exception 异常的回调函数并不能像 set_error_handler 的回调函数那样通过返回 true 来使异常被消除,即使回调函数处理了异常,后继代码也不会被继续执行,因此想继续执行后续代码必须使用 try-catch。

但是有一个例外:脚本结束回调函数可以被执行,抛出的异常即使没有被处理,该回调函数也是能被执行的。 register_shutdown_function(callback functionName[,argument1,argument2,...]);

例如:

  1. function shutdownfunction(){
  2. echo 'script is end';
  3. }
  4. register_shutdown_function("shutdownfunction");
复制代码

因为 shutdownfunction() 在脚本结束时被执行,所以 这个回调函数之内可以调用脚本中任意位置的函数,即使该函数定义在 错误抛出位置之后(函数定义是在 脚本编译期完成的)。

四、trigger_error(string errorMsg[,int user_error_type]) 该函数用于主动触发一个错误: user_error_type 只能是 E_ALL、E_USER_ERROR、 E_USER_WARNING、 E_USER_NOTICE 或其组合的值。

set_error_handler(callback functionName[,user_error_type]); // 为 trigger_error() 设置一个回调函数来处理错误,包括系统抛出的错误和用户使用 trigger_error() 函数触发的错误。

可选参数 user_error_type : 如果设定此参数,则 trigger_error 抛出的错误类型符合 在user_error_type 的定义范围才能触发回调函数。 这个值的设置类似于 error_reporting() 函数 。

第一个参数(callbeck functionName): 一个函数名,该函数 可以有 5 个参数,其中前 2 个必选,依次是: trigger_error 抛出的 user_error_type、trigger_error 抛出的 errorMsg、抛出错误的文件的绝对路劲、抛出错误的行号、抛出错误时的上下文环境 (一个数组,包含了trigger_error() 所在作用域内的所有变量、函数、类等数据 )

回调函数的返回值: 如果返回 false ,系统错误处理机制仍然继续抛出该错误,返回 true 或 无返回值 则消除错误。 trigger_error() 触发的错误不会被 try-catch 异常捕获语句捕获。 您可能感兴趣的文章: PHP 异常处理相关知识 使用php异常处理类Exception的例子 php中的异常处理、错误的抛出及错误回调函数 一个简单的php自定义异常类 学习php错误与异常设置



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

自定义/扩展框架:如何添加自定义功能。 自定义/扩展框架:如何添加自定义功能。 Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

See all articles