首页 » SEO优化 » php打印毛病技巧_TP6异常捕获机制HTTP请求异常事理解析常见问题分享

php打印毛病技巧_TP6异常捕获机制HTTP请求异常事理解析常见问题分享

访客 2024-10-23 0

扫一扫用手机浏览

文章目录 [+]

非常机制大家在项目都会利用到,但对付框架的非常事理你知道吗? 以及框架里面有缺点但是它便是不抛出来,直接500做事缺点。
如何办理呢?

一、TP6非常有那些类型

TP6的对PHP版本是>7.1.0

php打印毛病技巧_TP6异常捕获机制HTTP请求异常事理解析常见问题分享

以是框架底层的非常捕获是继续了Throwable缺点非常接口。
以是全体框架都是基于该接口来操作的。
可能有的小伙伴说,一样平常非常捕获不是用Exception吗?为什么是Throwable呢?

php打印毛病技巧_TP6异常捕获机制HTTP请求异常事理解析常见问题分享
(图片来自网络侵删)

那是由于Exception类是实现了Throwable接口,从而来方面我们调用。
接口如果不实现它有用吗?实现流程:TP框架的Exception类继续PHP底层Exception类,底层类再去实现Throwable接口

注:Throwable可参加上一篇文章PHP7缺点非常

TP6共用8大非常类型,在vendor\topthink\framework\src\think\exception下面:

分别是:缺点非常、文件非常、系统非常、HTTP非常、HTTP相应非常、造孽数据非常、路由非常、数据验证非常

个中ErrorException是缺点非常,这也是为什么像PHP的语法缺点框架可以捕获的缘故原由。

而大家常用的Exception类来抛出非常,它就会去实现该PHP底层缺点非常类,而像ErrorException也会去实现Exception基类。
以是大家可以把它理解为运用逻辑操纵的基类。
而像Http、Route、Valide它们会去继续PHP底层的RuntimeException

RuntimeException还是会继续Exception

RuntimeException类的继续办法

常常利用的getMessage、getFile等方法都是来源于我们的Throwable接口

二、非常捕获的事理解析

TP6框架有2中办法,分为手动与自动捕获。
手动捕获非常是基于try-catch构造来进行捕获。
例如:

try { echo 44; throw new Exception('我是手动抛出来的');} catch (\Exception $e) { // 这是进行非常捕获 return json($e->getMessage());}//实行结果:44\公众我是手动抛出来的\公众

把稳:PHP非常是不抛出不实行的,这里的手动抛出是指,当我们throw抛出后。
它会不才面的Catch里面进行捕获。
而不是说你都不 throw new Exception工具。
就可以不才面捕获到非常

抛出非常便是去实行 了tp的定义的Exception类,也便是我们在框架目录下面的vendor\topthink\framework\src\think\Exception.php类

那自动是怎么实现的呢?

自动实现是我们再去启动框架的时候会把它自动的注入到容器里面并绑定关系的。
一开始是没有,当运行后就会绑定起来。

绑定后的关系,array_merge是合并多个数组为一个。
如果有多个关系就合并用一个来绑定。
终极就有think\exception\Handle=>app\ExceptionHandle 的关系

这也是为什么TP6已经默认实现其全局的自动非常类,你可以不用再去实现了。
而这个实现的类便是app\ExceptionHandle类库。
也便是框架里面绑定的做事实例都会在框架载入的来启动。

那这个自动办法 也须要调用方法啊?你不调用怎么实行呢?

当我们绑定实例化关系后,然后再绑定实例给容器后,我们就会去实行HTTP要求,它便是HTTP下面去捕获我们非常的。

看到了吗?,当我们去实行要求的时候,如果有非常抛出,那就会被Throwable接口管理到。
接口的触发便是在于类库去实现了接口的,这个 比较好理解。
然后我们就会调用前面注册到容器里面的Handle::class--->report()方法

三、框架运用缺点不抛出的办理方案

框架运用的缺点不抛出是在于框架默认只是去捕获HTTP要求的处理,而不会浸染于运用。
以是如果是你运用下面涌现问题,它是抛不出来,这个大家后面写代码的时候一定要去把稳到,不然到时候就尴尬了

例如:配置文件Log.php有语法缺点,但是你去访问方法的时候就直接报500,而不是抛出非常,如果你的运用配置接口不对也是一样的

那这个是怎么造成的呢?

这个是由于在我们去实行要求实现自动抛出的时候,须要在容器里面去反转实例,当我们的缺点运用缺点的时候,我们就会进行Error的缺点注册机制里面去捕获,它 不是属于普通缺点非常捕获机制。
而在运用缺点捕获,我们是把缺点信息打印到掌握台上,以是它不会输出到我们浏览器上面

如何办理:大家可以用debug来调试下,就可以看到他直接打印到掌握台上

希望大家有收成,对付框架源码解析。
我会不定期更新。
大家可以留言或者关注发私信。
我会根据大家见地来更新技能文章。

年轻就要折腾

标签:

相关文章

我国土地利用分类代码的构建与应用

土地利用分类代码是我国土地管理的重要组成部分,是土地资源调查、规划、利用和保护的依据。土地利用分类代码的构建与应用显得尤为重要。本...

SEO优化 2025-02-18 阅读1 评论0

微信跳转微信支付便捷支付体验的秘密武器

移动支付已成为人们日常生活中不可或缺的一部分。作为我国领先的社交平台,微信支付凭借其便捷、安全的支付方式,深受广大用户的喜爱。而微...

SEO优化 2025-02-18 阅读1 评论0

探寻会计科目代码背后的奥秘分类与

会计科目代码是会计信息系统中不可或缺的组成部分,它将企业的经济活动进行分类和归纳,为会计核算、财务分析和决策提供重要依据。本文将从...

SEO优化 2025-02-18 阅读1 评论0