关于除法运算里的两个异常

<?php
declare(strict_types=1);
ini_set('display_errors', 'On');
error_reporting(-1);


// 如果除数为零,不使用try-catch就会报Fatal error
// $result = 9527 / mt_rand(0, 0); // Fatal error: Uncaught DivisionByZeroError: Division by zero


// 如果除数为零,将抛出DivisionByZeroError异常
try {
    $result = 9527 / mt_rand(0, 0);
} catch (DivisionByZeroError $e) {
    echo 'DivisionByZeroError: ' . $e->getMessage() . PHP_EOL;
    // DivisionByZeroError: Division by zero
}


// 如果num1是PHP_INT_MIN并且num2是-1,将抛出ArithmeticError异常
try {
    $result = intdiv(PHP_INT_MIN, -1);
} catch (ArithmeticError $e) {
    echo 'ArithmeticError: ' . $e->getMessage() . PHP_EOL;
    // ArithmeticError: Division of PHP_INT_MIN by -1 is not an integer
}


//========== 总结 ==========//
// 1、虽然DivisionByZeroError和ArithmeticError都是以Error结尾,但从它们可以被catch可知,它们确实是异常(并且是PHP内置的预定义异常)。
// 2、如果除数为零,不使用try-catch就会报Fatal error,但是从错误信息可以知道,报错的本质是没有捕获DivisionByZeroError异常,
//    除数为零只是引发DivisionByZeroError异常的原因。

Copyright © 2024 码农人生. All Rights Reserved