PHP 错误与异常处理(一)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: PHP 错误与异常处理详解

timg_3_

PHP 错误与异常处理(一)

异常与错误

  • PHP中的错误:

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

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

以上是PHP中错误和异常的一个概念,PHP中任何自身的错误或者是非正常的代码都会当做错误对待,并不会以异常的形式抛出,但是也有一些情况会当做异常和错误同时抛出。也就是说,你想在数据库连接失败的时候自动捕获异常是行不通的,因为这就不是异常,是错误。

  • 错误等级

要做错误处理,必须得明细错误级别:

Fatal Error:致命错误(脚本终止运行)
        E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本
        E_CORE_ERROR    // PHP启动时初始化过程中的致命错误
        E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
        E_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程序退出。

  • 简单的错误处理:

PHP代码在运行的过程中,一旦出现错误,就会触发系统的错误处理机制。如果我们配置了错误报告就回直接报告出错误。如图所示:

像这样的处理如果我们的代码在生产上运行,就会暴露很多信息(比如服务器的系统),所以我们会做简单的配置:

第一种: 修改php.ini 配置文件:

error_reporting = E_ALL //将向PHP发送每个错误
display_errors = Off //不显示错误报告
log_errors = On   //开启错误日志记录
log_errors_max_log = 1024 //每条日志的最大长度
error_log = G:/myerror.log //指定错误日志文件

注意:由于我们关闭了错误报告,但是错误是存在的,为了排查错误,我们开启了错误日志.

第二种: 不修改配置文件,在代码层处理

error_reporting(E_ALL);  //将向PHP发送每个错误
ini_set('display_errors',0); //不显示错误报告
ini_set('log_errors',1);    //开启错误日志记录
ini_set('error_log','./error.log'); //指定错误日志文件
test();

运行以上代码,就会发现 当前目录下出现 error.log 的文件,内容如下:

[05-Jul-2018 03:37:38 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function test() in D:\phpStudy\WWW\test.php:6
Stack trace:
#0 {main}
  thrown in D:\phpStudy\WWW\test.php on line 6
  • 简单的PHP异常处理
function checkNum($number)
{
 return 100/$number;
}

如上代码所示: 在调用 checkNum()函数的时候 如果在调用的时候 参数传递为0,就会出现异常,这个时候我们就会用到 异常处理操作:

function checkNum($number)
{
    if($number==0) {
        throw new Exception("参数不能为0");
    }
    return 100/$number;
}

然后在调用的时候:

<?php
try {
    checkNum(2);
    echo '成功了';
} //捕获异常
catch (Exception $e) {
    echo '错误信息: ' . $e->getMessage();
}

再比如如下的异常处理:

<?php
$pdo = new PDO('mysql://host=wrong_host;dbname=wrong_name');
$count = $pdo->exec("DELETE FROM fruit WHERE colour = 'red'");

我们链接数据库执行删除操作的时候,我们无法确保数据库的地址和用户名输入都是正确的时候,就会使用异常处理操作,来优化我们的代码

try {
    $pdo = new PDO('mysql://host=wrong_host;dbname=wrong_name');
    $count = $pdo->exec("DELETE FROM fruit WHERE colour = 'red'");
} catch (PDOException $e) {
    $code = $e->getCode();
    $message = $e->getMessage();
    echo '对不起,业务正忙,请稍后再试';
    exit;
}

Exception是所有异常的基类。他提供了一下方法给我们用来处理异常:

Exception::getMessage — 获取异常消息内容
Exception::getPrevious — 返回异常链中的前一个异常
Exception::getCode — 获取异常代码
Exception::getFile — 创建异常时的程序文件名称
Exception::getLine — 获取创建的异常所在文件中的行号
Exception::getTrace — 获取异常追踪信息
Exception::getTraceAsString — 获取字符串类型的异常追踪信息
Exception::__toString — 将异常对象转换为字符串
Exception::__clone — 异常克隆

原文链接:

PHP 错误与异常处理(一)

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
安全 程序员 PHP
PHP中的异常处理:提升代码的健壮性
【10月更文挑战第8天】在编程的世界中,错误和异常是不可避免的。它们就像路上的坑洼,可能会让我们的程序“跌倒”。但是,如果我们能够正确地处理这些异常,就可以让我们的程序更加稳健,就像我们学会了如何在坑洼的路上稳稳地行走一样。本文将介绍PHP中的异常处理机制,以及如何使用它来提升我们的代码质量。
|
1月前
|
PHP 开发者
深入理解PHP中的异常处理机制
【9月更文挑战第10天】PHP的异常处理是编程中不可或缺的一部分,它允许开发者优雅地管理错误和意外事件。本文将通过浅显易懂的语言和生动的例子,带你走进PHP异常处理的世界,让你了解如何捕捉和处理异常,以及如何使用这一机制来提升代码的健壮性和可维护性。
|
12天前
|
PHP 开发者
深入理解PHP中的异常处理
【10月更文挑战第5天】在编程世界里,错误和异常是难以避免的。它们如同人生道路上的绊脚石,让我们跌倒,但也给我们机会学习如何站起来。本文将带你走进PHP的异常处理世界,探索如何在代码中优雅地处理这些“绊脚石”,让你的程序更加健壮和可靠。我们将一起学习如何使用try-catch语句来捕获异常,以及如何自定义异常类来处理特定的错误情况。通过本文,你将获得在PHP中有效管理错误的能力,就像在人生旅途中学会避开陷阱一样重要。
9 1
|
14天前
|
PHP 数据库 开发者
PHP中的异常处理和自定义异常
【10月更文挑战第3天】在PHP编程中,异常处理是一个重要的话题。它允许开发者优雅地处理错误,提高代码的可读性和可维护性。本文将介绍如何在PHP中进行异常处理,包括基本的try-catch结构,以及如何创建和使用自定义异常类来处理特定的错误情况。通过实际示例,我们将看到如何使用异常处理机制来增强应用程序的健壮性和灵活性。
14 1
|
26天前
|
程序员 数据库连接 PHP
PHP中的异常处理:提升代码的健壮性
【9月更文挑战第30天】在编程的世界里,错误和异常是不可避免的。本文将深入探索PHP中异常处理的机制,揭示如何通过有效的异常管理来增强代码的健壮性和可靠性。我们将从基础概念出发,逐步深入到高级应用,最后通过实际代码示例来巩固理论知识。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和启示。
34 6
|
24天前
|
程序员 PHP
PHP中的异常处理:如何优雅地解决错误
【9月更文挑战第32天】在编程的世界里,错误和异常是难以避免的。它们像是道路上的绊脚石,时刻提醒着我们代码的不完美。然而,正如夜晚的星空中最亮的星,总是那些历经磨难后依然坚持闪耀的星星一样,优秀的程序员也懂得如何在错误面前展现他们的智慧与韧性。本文将带你走进PHP的异常处理世界,教你如何用优雅的姿态面对和解决问题,让程序运行得更加顺畅和稳定。
14 1
|
1月前
|
程序员 PHP
PHP中的异常处理:理解与实践
【9月更文挑战第15天】在编程世界中,错误和异常是避免不了的。它们就像路上的坑洼,让我们的代码之旅变得颠簸不堪。但是,如果我们能够学会使用PHP的异常处理机制,就能像驾驶一辆装有先进悬挂系统的车辆一样,平稳地驶过这些坑洼。本文将引导你理解PHP中异常的本质,并教你如何捕获和处理它们,以确保你的代码更加健壮和可靠。准备好,让我们一起探索这个主题,开启一段新的编程旅程吧!
39 17
|
28天前
|
PHP
PHP中的异常处理与错误管理
【9月更文挑战第28天】在PHP编程的世界里,异常处理和错误管理是保持代码健壮性的守门员。它们像一位细心的园丁,修剪着程序运行中可能出现的荆棘。本文将深入探讨如何在PHP中优雅地处理异常,以及如何有效地管理错误,确保你的应用程序即使在风雨交加的日子里也能绽放光彩。
19 2
|
1月前
|
PHP 开发者
PHP中的异常处理:如何优雅地处理错误
【9月更文挑战第15天】在编程的世界里,错误总是不请自来。面对这些不速之客,我们可以选择慌乱应对,也可以选择优雅地解决。本文将带你了解如何在PHP中通过异常处理来优雅地管理那些意外的“客人”。从基础的异常概念到深入的异常实践,让我们一起探索如何在代码中实现更健壮、更可靠的错误处理机制。
|
9天前
|
PHP 开发者 UED
PHP中的异常处理:提升代码的健壮性
【10月更文挑战第8天】在编程世界中,错误和异常是不可避免的。它们如同路上的绊脚石,让我们的程序跌倒。但如果我们学会了如何处理这些异常,就能像学会走路的孩子一样,即使跌倒也能爬起来继续前进。本文将引导你如何在PHP中捕获并处理异常,让你的代码更加健壮,能够优雅地面对各种挑战。