0

0

直击PHP的异常和错误处理

coldplay.xixi

coldplay.xixi

发布时间:2020-06-06 15:37:52

|

2806人浏览过

|

来源于CSDN

转载


直击PHP的异常和错误处理

异常和错误

示例:

  $num = 0;
    try {
        echo 1/$num;
    } catch (Exception $e){
        echo $e->getMessage();//并不能执行到这里
    }
    //说明try{}catch{}是用于捕获异常的,而错误是不能捕获到的。
 
    //手动抛出异常进行捕获
    $num = 0;
    try {
        if($num == 0){
            //通过if判断可以处理错误,手动抛出异常(如何实现自动捕获错误呢,需结合三个php内置函数)
            throw new Exception('除数为零');
        }
        echo 1/$num;
    } catch (Exception $e){
        echo $e->getMessage();
    }

什么是异常

程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。

 

立即学习PHP免费学习笔记(深入)”;

自学 PHP、MySQL和Apache
自学 PHP、MySQL和Apache

本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。 本书是第4版,经过了全面的更新、重写和扩展,包括PHP5.3最新改进的特性(例如,更好的错误和异常处理),MySQL的存储过程和存储引擎,Ajax技术与Web2.0以及Web应用需要注意的安全

下载

什么是错误

属于 php 脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice 都是错误,只是他们的级别不同而已,并且错误是不能被 try-catch 捕获的

 

立即学习PHP免费学习笔记(深入)”;

错误的分类

Fatal Error: 致命错误(脚本终止运行)E_ERROR // 致命的运行错误,错误无法恢复,暂停执行脚本E_CORE_ERROR // PHP 启动时初始化过程中的致命错误E_COMPILE_ERROR // 编译时致命性错,就像由 Zend 脚本引擎生成了一个 E_ERRORE_USER_ERROR // 自定义错误消息。像用 PHP 函数 trigger_error(错误类型设置为:E_USER_ERROR)Parse Error:编译时解析错误,语法错误(脚本终止运行)E_PARSE // 编译时的语法解析错误Warning Error:警告错误(仅给出提示信息,脚本不终止运行)E_WARNING // 运行时警告 (非致命错误)。E_CORE_WARNING // PHP 初始化启动过程中发生的警告 (非致命错误) 。E_COMPILE_WARNING // 编译警告E_USER_WARNING // 用户产生的警告信息Notice Error:通知错误(仅给出通知信息,脚本不终止运行)E_NOTICE // 运行时通知。表示脚本遇到可能会表现为错误的情况.E_USER_NOTICE // 用户产生的通知信息。5 类是产生 ERROR 级别的错误,这种错误直接导致 PHP 程序退出。分别是 ERROR = E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_PARSE

如何实现捕获错误

实现用 try {} catch (Exception $e){} 捕获异常的方式,来捕获错误,需借助三个函数

// 注册一个会在php中止时执行的函数
    register_shutdown_function('myShutdownFunction');
    function myShutdownFunction()
    {
        if ($error = error_get_last()) {
            var_dump('register_shutdown_function: Type:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '');
        }
    }
//注册异常处理函数, 没有捕获处理的异常,将统一再这里处理
    set_exception_handler('myException');
    function myException($exception)
    {
        var_dump("set_exception_handler: Exception: " . $exception->getMessage()  . '');
    }

 

立即学习PHP免费学习笔记(深入)”;

 //注册错误处理函数
    set_error_handler('myError');
    function myError($type, $message, $file, $line)
    {
        //var_dump('set_error_handler: ' . $type . ':' . $message . ' in ' . $file . ' on ' . $line . ' line .
'); throw new Exception($message); }


捕获所有错误的原理

由 set_error_handler () 可知,他能够捕获一部分错误,不能捕获系统级 E_ERROR、E_PARSE 等错误,但是这部分可以由 register_shutdown_function () 捕获。所以两者结合能出现很好的功能。

 

立即学习PHP免费学习笔记(深入)”;

小结

三个函数实现自动捕获异常和错误

set_error_handler () 只能够捕获部分错误

register_shutdown_function () 结合 set_error_handler () 函数,能捕获所有错误

set_exception_handler () 用于捕获异常

error_get_last () 最后终止错误信息

在捕获错误的函数中,再手动抛出异常,即实现 set_exception_handler 能够捕获错误。

推荐教程:《PHP视频教程

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

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

相关专题

更多
Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

28

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

379

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

115

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

9

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

47

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.4万人学习

MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号