搜索
首页后端开发php教程详解PHP中错误与异常及其相关知识

详解PHP中错误与异常及其相关知识

Jul 25, 2020 pm 05:32 PM
php异常错误

详解PHP中错误与异常及其相关知识

PHP错误级别

Parse error > Fatal Error > Waning > Notice > Deprecated

  • Deprecated 最低级别的错误(不推荐,不建议)
    使用一些过期函数的时候会出现,程序继续执行

  • Notice 通知级别的错误
    使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行

  • Waning 警告级别的错误
    程序出问题了,需要修改代码!!!程序继续执行

  • Fatal Error 错误级别的错误
    程序直接报错,需要修改代码!!!中断程序执行,可使用register_shutdown_function()函数在程序终止前触发一个函数

  • Parse error 语法解析错误
    语法检查阶段报错,需要修改代码!!!中断程序执行,除了修改ini文件,将错误信息写到日志中,什么也做不了

  • E_USER_相关的错误
    用户定义的错误,用户手动抛出错误,进行自定义错误处理

PHP错误相关函数

  • ini_set('display_errors', 0); //关闭错误输出(开发环境开启,生产环境关闭)

  • error_reporting(E_ALL&~E_NOTICE); //设置错误报告级别

  • ini_set('error_reporting',0); //设置错误报告级别

PHP错误配置

  • 除了在脚本里设置,还可以在php.ini配置文件里配置

  • error_reporting = E_ALL&~E_NOTICE; //设置错误报告级别

  • display_errors = 1; //开发环境开启,生产环境关闭

PHP异常

  • PHP的异常是后来新增特性,与JAVA/C#的异常不同,PHP异常需要手动抛出throw new Exception,而不是系统自动抛出

  • PHP错误与异常的区别,他们是2个不同的概念,但有共同的地方:

    如果异常不捕获处理,程序将会终止,并报出Fatal Error 错误,看到这里大家就会觉得异常是不是错误的一种,这是一种错觉,但这样理解也可以。但异常捕获后程序可以继续执行,而真正的Fatal Error错误出现后程序就必须终止

  • 异常可以使用 try{}catch(){} 来捕获捕获,捕获之后后续代码可以继续执行;而错误是无法使用 try{}catch(){} 捕获的

  • 如果抛出了异常,就必须捕获它,否则程序终止执行。

PHP异常与错误的抛出

  • 异常抛出:throw new Exception('Some Error Message');

  • 错误抛出:trigger_error()

  • trigger_error() 触发的错误不会被 try-catch 异常捕获语句捕获

PHP错误处理

  • set_error_handler()

只能处理DeprecatedNoticeWaning这三种级别错误,而且处理后,脚本将会继续执行发生错误的后一行

  • register_shutdown_function()

这个方法是脚本结束前的最后一个回调函数,所以无论是die()/错误(异常)/还是脚本正常结束都会调用

PHP异常处理

  • set_exception_handler()

设置默认的异常处理程序,有try/catch捕获的话这个函数就不会执行,反之就会执行,而且执行的话,脚本将不会继续执行发生异常的后一行代码,程序马上中止

  • set_exception_handler()注意事项

set_exception_handler(“myException”) 不仅可以接受函数名,还可以接受 类的方法公开的静态方法公开的非静态方法 都可以),但需要以 数组形式 传递,数组的第一值为“类名”,第二个参数为“方法名”,如下代码所示:

<?php
class App{
    function myException($exception) {
        echo "<b>Exception:</b> " , $exception->getMessage();
    }
}
 
set_exception_handler(array(&#39;App&#39;,&#39;myException&#39;));
 
throw new Exception(&#39;Uncaught Exception occurred&#39;);
?>

PHP异常分类

  • 由于用户行为导致出现异常

    1、没有通过验证器

    2、没查询到结果

    3、需要向用户返回具体信息

    4、不需要记录日志

    5、可作为异常或者不作为异常,根据需求和个人情况而定

  • 由于服务器自身导致出现异常

    1、代码出错

    2、调用第三方接口错误

    3、不需要向用户返回具体信息

    4、需要记录日志

在程序中PHP异常的自动抛出

  • 由于PHP异常是后面版本新增的特性,设计上与JAVA/C#的异常不一样,JAVA的异常大部分是系统自动抛出,而PHP异常不是系统自动抛出,需要手动抛出导致PHP异常在程序中的作用减半(异常就是意料之外的事情,根本我们意料不到的,如果用手动抛出,证明已经预先预料到了,那异常的意义就变味了)

  • 在PHP中异常是手动抛出的,而错误是系统自动抛出的(也可手动抛)

  • 我们需要把异常做成系统自动抛出接(例如JAVA)就必须借助错误(这三种错误DeprecatedNoticeWaning,其他的错误不行,因为会终止程序运行)

<?php

    set_error_handler(&#39;error_handler&#39;);

    function error_handler($errno, $errstr, $errfile, $errline) {
        throw new Exception($errstr);
    }

    try {
        $num = 100 / 0;
    } catch(Exception $e) {
        echo $e -> getMessage() . &#39;<br/>&#39;;
    }

    echo "end";
?>

执行结果:

Division by zero
end

PHP7 异常处理的大变化

  • 一段TP5源代码引出PHP7异常的变化

    3.png

    明明set_exception_handler()函数只可以捕获Exception类或派生类的对象,为何还需要捕获的对象做判断呢?结果引出了PHP7的变化,请看下面分析

  • 前面已经讲过异常是需要手动抛出,及时上面所说的方法最多也是把DeprecatedNoticeWaning这3类错误封装成系统自动抛出的异常,但致命错误仍然还是无法封装成系统自动抛出的异常,因为致命错误(Fatel Error)仍然无法捕获

  • 在PHP7之前,DeprecatedNoticeWaning这类错误是可以捕获的(使用set_error_handler()函数),而Fatel Error无法捕获的

  • 在PHP7之后,出现了一个异常与错误通用的接口Throwable,Exception类与Error类都实现了该接口,导致Error类或Error类的派生类的错误对象(大部分Fatel Error,而之前三类错误不变)也可以像Exception一样被捕获(2种捕获方法:1、try/catch  2、set_exception_handler())

  • 示例代码

try{
    go();//该函数未定义
}catch(Exception $e){
    //捕获异常
}catch(Error $er){
    //捕获错误
}

相关教程推荐:《PHP教程

以上是详解PHP中错误与异常及其相关知识的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:segmentfault。如有侵权,请联系admin@php.cn删除
PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP如何处理对象克隆(克隆关键字)和__clone魔法方法?PHP如何处理对象克隆(克隆关键字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP与Python:用例和应用程序PHP与Python:用例和应用程序Apr 17, 2025 am 12:23 AM

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

描述不同的HTTP缓存标头(例如,Cache-Control,ETAG,最后修饰)。描述不同的HTTP缓存标头(例如,Cache-Control,ETAG,最后修饰)。Apr 17, 2025 am 12:22 AM

HTTP缓存头的关键玩家包括Cache-Control、ETag和Last-Modified。1.Cache-Control用于控制缓存策略,示例:Cache-Control:max-age=3600,public。2.ETag通过唯一标识符验证资源变化,示例:ETag:"686897696a7c876b7e"。3.Last-Modified指示资源最后修改时间,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1?说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1?Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP:服务器端脚本语言的简介PHP:服务器端脚本语言的简介Apr 16, 2025 am 12:18 AM

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

PHP和网络:探索其长期影响PHP和网络:探索其长期影响Apr 16, 2025 am 12:17 AM

PHP在过去几十年中塑造了网络,并将继续在Web开发中扮演重要角色。1)PHP起源于1994年,因其易用性和与MySQL的无缝集成成为开发者首选。2)其核心功能包括生成动态内容和与数据库的集成,使得网站能够实时更新和个性化展示。3)PHP的广泛应用和生态系统推动了其长期影响,但也面临版本更新和安全性挑战。4)近年来的性能改进,如PHP7的发布,使其能与现代语言竞争。5)未来,PHP需应对容器化、微服务等新挑战,但其灵活性和活跃社区使其具备适应能力。

为什么要使用PHP?解释的优点和好处为什么要使用PHP?解释的优点和好处Apr 16, 2025 am 12:16 AM

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

See all articles

热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.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1

禅工作室 13.0.1

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

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),