PHP7异常与错误的概述是什么,如何做异常处理
Admin 2022-08-19 群英技术资讯 260 次浏览
异常与错误的概述
异常是指程序运行中不符合预期情况以及与正常流程不同的状况。
比如你链接数据库,在参数都写上去的条件下,发现链接不上去,这就属于不符合预期
可以被 try-catch 捕捉得到
是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。
平时遇到的 warming、notice都是错误,只是级别不同而已。
例如:
除了这几种情况,其余全部为异常
在以前的 php5.X 中 并且不能被 try-catch 捕捉得到,到了 php 7.x 中,定义了一个 Throwable 接口 并使得大部分的 Error 和
Exception 实现了该接口,我们得以在 try-catch 中抛出该错误
所以说以后想要捕获异常,而你又不知道此异常是 Error 还是 Exception 的话,可以向这样抛出
try{ …… }catch(Throwable $e){ …… }
错误的级别
在 php 中的错误也是有级别的
Parse error
>Fatal Error
> Waning
> Notice
>Deprecated
Deprecated 最低级别的错误(不推荐,不建议) 使用一些过期函数的时候会出现,程序继续执行 Notice 通知级别的错误 使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行 E_NOTICE // 运行时通知。表示脚本遇到可能会表现为错误的情况. E_USER_NOTICE // 用户产生的通知信息。Waning 警告级别的错误 程序出问题了,需要修改代码!!!程序继续执行 E_WARNING // 运行时警告 (非致命错误)。 E_CORE_WARNING // PHP初始化启动过程中发生的警告 (非致命错误) 。 E_COMPILE_WARNING // 编译警告 E_USER_WARNING // 用户产生的警告信息Fatal Error 错误级别的错误 程序直接报错,需要修改代码!!!中断程序执行,可使用register_shutdown_function()函数在程序终止前触发一个函数 E_ERROR // 致命的运行错误,错误无法恢复,暂停执行脚本 E_CORE_ERROR // PHP启动时初始化过程中的致命错误 E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR E_USER_ERROR // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)Parse error 语法解析错误 语法检查阶段报错,需要修改代码!!!中断程序执行,除了修改ini文件,将错误信息写到日志中,什么也做不了 E_PARSE //编译时的语法解析错误
自定义错误处理程序
有的时候,php 中自带的错误处理程序,并不能完全满足我们得需要,大部分时候,我们都需要手动重写异常处理。
php 给我们提供了三个函数来帮助我们来处理,分别是
set_error_handler()
set_exception_handler()
register_shutdown_function()
error_get_last()
它能获取最后发生的错误。举例 register_shutdown_function('shutdown');function shutdown(){ if ($error = error_get_last()) { var_dump($error); } }$name //没写 ; 号
执行结果 Parse error: syntax error, unexpected ';' in /app/swoole/errorDemo.php on line 34
Emmmmm 这不扯淡吗? 分明分明没有执行呢?
其实原因使因为,程序执行前,我们 php 会先检查我们程序的语法问题,如果没有问题,我们才能执行我们的程序。
我们上面的代码没用通过我们的语法检查,所以直接报错。
那么问题来了? 我们在框架中的时候,为什么是框架都是框架给我们报错呢?
在框架中,其代码是通过一个入口文件来加载的。而我们php检测语法错误的时候,只检查我们的 index.php 有它 require 是不会受到检测的。当我们代码出错时,那是在 run-time 中检测的错误,所以我们框架中的可以相应错误
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php中PDO库:1、可以支持12种不同类型的数据库驱动,因此PDO受到了更多的好评。2、PDO还有其他特性,这使得它们成为大多数开发者的更好选择。
laravel的加密方法:1、利用Hash,语法“bcrypt('需要加密的文本')”或“Hash::make('需要加密的文本')”;2、使用Laravel的加密器,语法“encrypt('需要加密的文本')”。
这篇文章主要介绍了laravel框架的安装与路由,结合实例形式分析了Laravel框架安装的相关步骤、命令及路由相关使用技巧,需要的朋友可以参考下
1、打开“php.ini”配置文件,在其中搜索“display_errors”项。2、将“display_errors”项的值设置为“Off”即可关闭所有的PHP错误报告,进而屏蔽所有错误。
php按值传递和引用传递的比较:1、按值传递中php必须复制值。特别是对于大型字符串和对象来说,这将是一项昂贵的操作。2、引用传递无需复制值,有利于性能提高。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008