京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PHP错误处理&非常处理方式小结

2024-11-4 11:39| 发布者: 44f6fa4f5| 查看: 139| 评论: 0

摘要: 1、错误处理的分类 ​ 语法错误: 违背了PHP程序语言的规则错误,称之为语法错误。 ​ 运行错误: 颠末语法错误检测后,将开始运行 PHP 代码,在此发生的错误为运行时错误。 ​ 逻辑错误: 逻辑错误是指

1、错误处理的分类

​ 语法错误: 违背了PHP程序语言的规则错误,称之为语法错误。

​ 运行错误: 颠末语法错误检测后,将开始运行 PHP 代码,在此发生的错误为运行时错误。

​ 逻辑错误: 逻辑错误是指程序开发过程中由于业务逻辑造成错误。

[code]print_r(数组类型) //没有以分号结束语句,报语法错误 /* 加载不存在文件 连接数据库失败 长途请求失败 函数或类不存在 */ require 'request.php'; //因为加载不存在文件,以是会发生运行时错误 echo (10/0); //逻辑错误,这IDE都会检测到,一般都有提示 //逻辑错误 for ($i = 0; $i < 5; $i--) { echo $i; } [/code]

2、常见错误陈诉类型

常量形貌
1E_ERROR致命的运行时错误。这类错误一般是不可恢复的情况,比方内存分配导致的问题。后果是导致脚本终止不再继续运行
2E_WARNING运行时告诫 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。
8E_NOTICE运行时关照。表示脚本碰到大概会表现为错误的情况。
64E_COMPILE_ERROR致命编译时错误。雷同 E_ERROR
2048E_STRICT启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。
8192E_DEPRECATED运行时关照。启用后将会对在未来版本中大概无法正常工作的代码给出告诫。
8191E_ALL全部错误和告诫,除级别 E_STRICT 以外。

留意:修改 [code]php.ini[/code] 设置文件, [code]display_errors = On[/code] 即开启大概关闭错误表现。

关闭告诫与致命错误

[code]error_reporting(~E_WARNING & ~E_COMPILE_ERROR); require('a'); [/code]

表现除关照外的全部错误

[code]error_reporting(E_ALL & ~E_NOTICE); echo $arrays; [/code]

关闭错误表现

[code]error_reporting(0); [/code]

3、非常处理

根本语法:

[code]try{ //逻辑代码 }catch(){ //捕捉非常时候的处理 } [/code]

留意: 需要手动抛出非常,这与其他语言不同,非常使用 try…cache 触发。

手动抛出非常的方法:

[code]throw new 错误类型($message, $code); [/code]

留意:可以设置多个catch,参数Exception 大概继承Exception的类

Exception 类的方法:

方法阐明重写
getFile产生非常错误的文件NO,final
getCode错误码NO,final
getLine错误行号NO,final
getMessage错误消息NO,final
__toString对象转字符串后输出内容YES

finally: 需要放在 [code]catch[/code] 后,[code]finally[/code]无论是否抛出非常都会实行。

登录非常处理的例子:

[code]class LoginException extends Exception { // 构造函数 public function __construct($message, $code = 0, Throwable $previous = null) { parent::__construct($message, $code, $previous); } // 将非常对象转为字符串 public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } // 自界说非常处理函数 public function logError() { // 记录登录错误日志 error_log("登录非常: " . $this->getMessage()); } } function loginUser($username, $password) { // 模拟登录逻辑 if ($username !== "admin" || $password !== "password") { throw new LoginException("无效的用户名或密码。"); } // 登录成功 return true; } try { $loggedIn = loginUser("guest", "pass123"); // 尝试登录 if ($loggedIn) { echo "登录成功!"; } } catch (LoginException $e) { // 捕捉登录非常 echo "登录失败:" . $e->getMessage() . "\n"; $e->logError(); // 调用自界说非常处理函数,记录登录错误日志 } catch (Exception $e) { // 捕捉其他非常 echo "发生了一个错误:" . $e->getMessage() . "\n"; } [/code]

操作数据库多表联动时捕捉非常回滚数据:

[code]try { // 连接数据库 $db = new PDO("mysql:host=localhost;dbname=mydatabase", "username", "password"); // 开始事故 $db->beginTransaction(); // 实行一系列数据库操作 $db->exec("INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"); $db->exec("INSERT INTO orders (user_id, product_id, quantity) VALUES (1, 1, 2)"); // 提交事故 $db->commit(); } catch (PDOException $e) { // 捕捉 PDO 非常 // 回滚事故 $db->rollBack(); // 记录非常日志 error_log("数据库操作非常: " . $e->getMessage()); // 输出错误信息 echo "发生了一个数据库操作非常:" . $e->getMessage() . "\n"; } [/code]

总结:

  1. 非常处理应该是有针对性的:捕捉和处理那些你知道如何处理的非常类型,而将未知或不可处理的非常传递给更上层的代码举行处理。

  2. 使用合适的非常类型:PHP 中有很多内置的非常类型,如 [code]Exception[/code]、[code]InvalidArgumentException[/code]、[code]RuntimeException[/code] 等。选择合适的非常类型可以更好地构造和识别代码中的非常情况。

  3. 按照非常类型的顺序举行捕捉:在 [code]catch[/code] 块中,应该按照特定非常类型到更一般非常类型的顺序举行排序。这样可以确保非常被正确捕捉,而且避免特定的非常被更一般的非常类型捕捉导致无法实行特定的非常处理逻辑。

  4. 使用多个 [code]catch[/code] 块举行处理:根据不同的非常类型,使用多个 [code]catch[/code] 块来处理不同类型的非常。这样可以更细粒度地处理非常,并根据需要实行特定的逻辑。

  5. 考虑添加日志或错误记录:在非常处理过程中,可以将非常信息记录到日志文件或错误日志中,以便后续的故障排查和分析。

  6. 避免过度捕捉非常:不要过度捕捉非常,这大概导致隐蔽潜在的问题或掩盖错误。只捕捉你知道如何处理的非常,并将其他未处理的非常传递给更上层的代码举行处理。

  7. 使用 [code]finally[/code] 块(可选):[code]finally[/code] 块中的代码无论是否发生非常都会实行。它通常用于开释资源或实行清算操作,以确保在非常发生时资源得到正确处理。

  8. 抛出自界说非常:通过界说自界说非常类,可以更好地构造和标识特定类型的非常。这样可以使代码更加清楚,并提供更丰富的非常信息。

PHP常见问题合集开发中的错误处理与日志记录

本文将总结常见的PHP开发问题,并提供错误处理和日志记录的解决方案。

一、PHP开发中的常见问题

语法错误:在PHP开发中,常常会出现拼写错误、缺少分号等语法错误。这些错误会导致程序无法正常实行。为了解决这些问题,我们应该养成精良的编码习惯,而且在开发过程中使用代码编辑器的自动补全和语法查抄功能。

变量未界说或未初始化:在PHP中,如果使用未界说或未初始化的变量,会导致告诫或致命错误。为了避免这种问题,应该始终在使用变量之前对其举行初始化或界说。

函数不存在或参数错误:在调用函数时,如果函数不存在大概传递了错误的参数,会导致程序无法正常实行。为了解决这些问题,应该对函数的存在举行查抄,并确保传递正确的参数。

数据库连接问题:在使用PHP开发Web应用程序时,常常会涉及到与数据库的连接。如果连接失败或出现其他问题,会导致无法正常访问或操作数据库。为了解决这些问题,应该确保数据库的设置正确,并使用try-catch语句捕捉非常。

文件访问权限问题:在PHP开发中,常常需要读取或写入文件。如果文件的访问权限不正确,会导致无法读取或写入文件。为了解决这些问题,应该确保文件有足够的访问权限,并在操作文件时举行错误处理。

二、错误处理的方法

错误陈诉设置:在开发环境中,应该将PHP的错误陈诉级别设置为E_ALL,以便能够捕捉全部错误。在生产环境中,应该将错误陈诉级别设置为E_ALL & ~E_NOTICE,以避免表现一些无关紧要的关照。

非常处理:在PHP中,可以使用try-catch语句来捕捉非常并举行处理。在抛出非常时,应该提供故意义的错误消息,并在catch块中举行相应的处理,比方记录日志或表现错误信息给用户。

自界说错误处理函数:可以使用set_error_handler()函数来设置自界说的错误处理函数。在该函数中,可以界说错误消息的输出方式,比方将错误消息写入日志文件或发送邮件关照。

三、日志记录的方法

使用日志库:PHP中有很多开源的日志库,比方Monolog和Log4php。通过使用这些库,可以方便地将错误信息写入文件、数据库或其他目标。

日志级别设置:在日志记录中,可以设置不同的日志级别,如DEBUG、INFO、WARNING、ERROR和CRITICAL等。根据不同的情况,可以选择记录不同级别的日志信息。

日志分割和归档:为了避免日志文件过大,可以使用日志分割和归档功能。通过使用日志库提供的工具,可以按照时间或文件巨细等条件,将日志文件分割成多个文件,并举行归档。

总结起来,开发中会碰到各种PHP问题,如语法错误、变量未界说、函数不存在、数据库连接问题和文件访问权限问题等。为了解决这些问题,可以使用错误处理和日志记录的方法。错误处理包括设置错误陈诉、使用非常处理和自界说错误处理函数。日志记录包括使用日志库、设置日志级别和实现日志分割和归档等。通过合理使用这些方法,可以提高代码的质量和可维护性,从而改善开发服从和用户体验。


来源:https://www.jb51.net/program/322278j9m.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 21:23 , Processed in 0.035887 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部