zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【PHP】PHP7的异常处理详解

PHP异常 详解 处理 php7
2023-09-27 14:29:21 时间

更多的异常是直接通过PHP直接处理的,和之前的PHP5不同的是更多的异常是通过Error exceptions来抛出。

作为一个普通的扩展,Error exceptions会持续冒出直到匹配到对应的catch块。如果没有进行匹配,就会触发被设置的set_exception_handler()来执行处理,如果没有默认的异常处理程序,则该异常将被转换为一个致命错误,并且将被像一个传统的错误被处理。

由于Error在错误层次结构不继承异常,像这样的代码catch (Exception $e) { ... }在PHP5中并不会捕获到对应的异常。我们可以用代码catch (Error $e) { ... }或者 set_exception_handler(),来对Error进行处理。


} catch (Error $e) { // Clearly a different type of object // Log error and end gracefully var_dump($e);

这里,并没有出现服务器500的错误。原因在于,PHP7中的Error把它拦截住了,没有冒泡在服务器中。


["message":protected]= string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14" ["string":"Error":private]= string(0) "" ["code":protected]= int(0) ["file":protected]= string(48) "/Applications/mamp/apache2/htdocs/curl/error.php" ["line":protected]= int(9) ["trace":"Error":private]= array(1) { [0]= array(4) { ["file"]= string(48) "/Applications/mamp/apache2/htdocs/curl/error.php" ["line"]= int(14) ["function"]= string(3) "add" ["args"]= array(2) { [0]= string(4) "left" [1]= string(5) "right" ["previous":"Error":private]= NULL

这样我们就可以通过日志的方式记录他们。


//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截

如果异常没有被捕获,PHP将继续担任目前它抛出同样的致命错误。

Reclassify E_STRICT notices
PHP异常处理函数,Thinkphp调试 在thinkphp中,除了异常类携带的简单file、code、message、trace等 还会获取当前服务器的配置、脚本的参数(get/post…)、数据库查询语句等 然后组合成一个有排版、数据充足的页面展示给我们,方便了我们排查问题。
PHP 异常任重而道远 这几天观察错误日志发现有一个数据反序列化的notice错误,实际情况我是从缓存中读取数据然后反序列化,因为反序列化失败,所以实际每次都是去数据库取的值。背后性能影响还是挺大的。
PHP 批斗大会之缺失的异常 很多群里老是有语言之争的聊天,我一般都看看罢了,也不参与。类似的例子,不胜枚举,后面我会持续输出一些 php 自黑的博客,希望 php 代码更加健壮、安全。也希望大家不要只看到 php 干活快,快的背后隐藏着无数的潜在风险,php 虽好,但是也不能贪杯哦。
小雨雨hi CSDN学院讲师、博客专家,专注服务端开发,服务端架构演变,区块链技术研究,项目管理,热衷学习前沿技术,以及日常的技术分享,曾经历过创业技术合伙人角色。