📜  PHP 7-错误处理(1)

📅  最后修改于: 2023-12-03 15:33:27.910000             🧑  作者: Mango

PHP 7-错误处理

在 PHP 7 中,错误处理机制得到了优化和改进。错误处理是开发过程中不可或缺的一部分,因为它可以帮助程序员识别、调试和修复程序中出现的问题。在本文中,我们将介绍 PHP 7 中的错误处理机制。

错误类型

在 PHP 7 中,共有三种错误类型:

  1. 一般错误(E_ERROR):如果发生了致命错误,代码将无法继续执行。示例:

    <?php
    function add($a, $b) {
        return $a + $b;
    }
    
    // 在第二个参数中意外传入字符串,导致该语句出错
    $result = add(2, 'hello');
    echo $result;
    ?>
    

    运行上述代码将会产生以下错误:

    PHP Fatal error:  Uncaught TypeError: Unsupported operand types...
    
  2. 警告(E_WARNING):如果程序有问题,但不会致命,PHP 将会发出警告并继续执行。示例:

    <?php
    $arr = array('apple', 'banana');
    
    // 想要输出橙子(指定的项不存在)
    echo $arr[2];
    ?>
    

    运行上述代码将会产生以下警告:

    PHP Warning:  Undefined array key 2 in...
    
  3. 通知(E_NOTICE):如果程序可能出现问题,但不会致命,并且 PHP 可以自动处理这些问题时,PHP 将会发出通知。示例:

    <?php
    $a = '';
    $b = 5;
    
    // 尝试将一个空字符串转换为整型
    $result = $a + $b;
    ?>
    

    运行上述代码将不会产生错误和警告,但是 PHP 将会发出通知。

错误处理方式

在 PHP 7 中,可以使用两种方式来处理错误:

  1. 抛出异常(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
    
  2. 错误处理函数(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 中,可以通过修改错误报告级别来控制错误的输出。错误报告级别有以下五种:

  1. ERROR_REPORTING_OFF:不报告任何错误
  2. ERROR_REPORTING_FATAL:报告致命错误
  3. ERROR_REPORTING_ERROR:报告所有错误
  4. ERROR_REPORTING_WARNING:报告通知和警告
  5. ERROR_REPORTING_NOTICE:只报告通知

示例:

<?php
// 设置错误报告级别
error_reporting(E_ERROR);

// 在这里出现错误,但不会报告警告或通知
$arr = array('apple', 'banana');
echo $arr[2];
?>

由于我们将错误报告级别设置为 E_ERROR,所以上述代码将不会报告警告或通知。但是,由于我们在尝试输出 $arr[2],所以将会提示无法打印该值的错误。