📅  最后修改于: 2023-12-03 15:33:27.910000             🧑  作者: Mango
在 PHP 7 中,错误处理机制得到了优化和改进。错误处理是开发过程中不可或缺的一部分,因为它可以帮助程序员识别、调试和修复程序中出现的问题。在本文中,我们将介绍 PHP 7 中的错误处理机制。
在 PHP 7 中,共有三种错误类型:
一般错误(E_ERROR):如果发生了致命错误,代码将无法继续执行。示例:
<?php
function add($a, $b) {
return $a + $b;
}
// 在第二个参数中意外传入字符串,导致该语句出错
$result = add(2, 'hello');
echo $result;
?>
运行上述代码将会产生以下错误:
PHP Fatal error: Uncaught TypeError: Unsupported operand types...
警告(E_WARNING):如果程序有问题,但不会致命,PHP 将会发出警告并继续执行。示例:
<?php
$arr = array('apple', 'banana');
// 想要输出橙子(指定的项不存在)
echo $arr[2];
?>
运行上述代码将会产生以下警告:
PHP Warning: Undefined array key 2 in...
通知(E_NOTICE):如果程序可能出现问题,但不会致命,并且 PHP 可以自动处理这些问题时,PHP 将会发出通知。示例:
<?php
$a = '';
$b = 5;
// 尝试将一个空字符串转换为整型
$result = $a + $b;
?>
运行上述代码将不会产生错误和警告,但是 PHP 将会发出通知。
在 PHP 7 中,可以使用两种方式来处理错误:
抛出异常(throw):当出现错误时,可以抛出异常。这个异常将会由 try-catch 块进行捕获和处理。示例:
<?php
function divide($a, $b) {
if ($b == 0) {
throw new Exception('Cannot divide by zero');
}
return $a / $b;
}
try {
$result = divide(10, 0);
} catch (Exception $e) {
// 捕获异常并输出错误信息
echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
运行上述代码将会产生以下错误:
Caught exception: Cannot divide by zero
错误处理函数(Error Handling Functions):PHP 7 也提供了一些错误处理函数,例如 set_error_handler(),register_shutdown_function(),等等。例如,可以将自定义的函数设置为错误处理函数来处理程序中出现的错误。示例:
<?php
function custom_error_handler($errno, $errstr, $errfile, $errline) {
echo "<b>Error:</b> [$errno] $errstr<br />";
echo " Fatal error on line $errline in file $errfile";
die();
}
// 设置错误处理函数
set_error_handler("custom_error_handler");
// 触发错误
$a = 10 / 0;
?>
运行上述代码将会产生以下错误:
Error: [2] Division by zero
Fatal error on line 12 in file /var/www/html/test.php
在 PHP 7 中,可以通过修改错误报告级别来控制错误的输出。错误报告级别有以下五种:
示例:
<?php
// 设置错误报告级别
error_reporting(E_ERROR);
// 在这里出现错误,但不会报告警告或通知
$arr = array('apple', 'banana');
echo $arr[2];
?>
由于我们将错误报告级别设置为 E_ERROR,所以上述代码将不会报告警告或通知。但是,由于我们在尝试输出 $arr[2],所以将会提示无法打印该值的错误。