<?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