PHP错误处理&异常处理方式小结 |
||||||||||||||||||||||||||||||||||||||||||
|
本文标签:PHP错误处理,php异常处理 1、错误处理的分类? 语法错误: 违背了PHP程序语言的规则错误,称之为语法错误 。 ? 运行错误: 经过语法错误检测后,将开始运行 PHP 代码,在此发生的错误为运行时错误 。 ? 逻辑错误: 逻辑错误是指程序开发过程中由于业务逻辑造成错误 。 print_r(数组类型) //没有以分号结束语句,报语法错误
/*
加载不存在文件
连接数据库失败
远程请求失败
函数或类不存在
*/
require 'request.php'; //因为加载不存在文件,所以会发生运行时错误
echo (10/0); //逻辑错误,这IDE都会检测到,一般都有提示
//逻辑错误
for ($i = 0; $i < 5; $i--) {
echo $i;
}
2、常见错误报告类型
注意:修改 关闭警告与致命错误 error_reporting('E_WARNING & 'E_COMPILE_ERROR);
require('a');
显示除通知外的所有错误 error_reporting(E_ALL & 'E_NOTICE); echo $arrays; 关闭错误显示 error_reporting(0); 3、异常处理 基本语法: try{
//逻辑代码
}catch(){
//捕获异常时候的处理
}
注意: 需要手动抛出异常,这与其他语言不同,异常使用 try…cache 触发 。 手动抛出异常的方法: throw new 错误类型($message, $code); 注意:可以设置多个catch,参数Exception 或者继承Exception的类 Exception 类的方法:
finally: 需要放在 登录异常处理的例子: 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}
";
}
// 自定义异常处理函数
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() . "
";
$e->logError(); // 调用自定义异常处理函数,记录登录错误日志
} catch (Exception $e) { // 捕获其他异常
echo "发生了一个错误:" . $e->getMessage() . "
";
}
操作数据库多表联动时捕获异常回滚数据: 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() . "
";
}
总结:
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问题,如语法错误、变量未定义、函数不存在、数据库连接问题和文件访问权限问题等 。为了解决这些问题,可以使用错误处理和日志记录的方法 。错误处理包括设置错误报告、使用异常处理和自定义错误处理函数 。日志记录包括使用日志库、设置日志级别和实现日志分割和归档等 。通过合理使用这些方法,可以提高代码的质量和可维护性,从而改善开发效率和用户体验 。 |