DivisionByZeroError

(PHP 7, PHP 8)

介绍

DivisionByZeroError 在尝试将数字除以零时抛出。

类概要

class DivisionByZeroError extends ArithmeticError {
/* 继承的属性 */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 继承的方法 */
public Error::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
final public Error::getMessage(): string
final public Error::getCode(): int
final public Error::getFile(): string
final public Error::getLine(): int
final public Error::getTrace(): array
private Error::__clone(): void
}
添加注释

用户贡献的注释 4 个注释

12
8ctopus
3 年前
在 php 7 中使用算术运算符 / 不会抛出异常,而在 php 8 中则会抛出异常。

<?php

try {
echo
intdiv(2, 0);
} catch (
DivisionByZeroError $e) {
echo
"Caught DivisionByZeroError!\n";
}

try {
echo (
2 / 0);
} catch (
DivisionByZeroError $e) {
echo
"Caught DivisionByZeroError!\n";
}
?>

# php 7
$ php test.php
捕获了 intdiv() 的除零错误
PHP 警告:test.php 第 10 行除以零
PHP 堆栈跟踪
PHP 1. {main}() test.php:0

警告:test.php 第 10 行除以零

调用堆栈
0.0740 417272 1. {main}() test.php:0

# php 8
$ php test.php

捕获了 intdiv() 的除零错误
捕获了 / 的除零错误
6
salsi at icosaedro dot it
8 年前
请注意,在除以零 1/0 和模除以零 1%0 时,首先会触发 E_WARNING(可能是为了与 PHP5 向后兼容),然后会抛出 DivisionByZeroError 异常。

例如,如果您使用 error_level(-1) 设置了最大级别的错误检测,并且您还将错误映射到异常,例如 ErrorException,那么在除以零时,只会抛出后者的异常,并报告“除以零”。结果是,像这样的代码

<?php
// 设置安全环境:
error_reporting(-1);

// 将错误映射到 ErrorException.
function my_error_handler($errno, $message)
{ throw new
ErrorException($message); }

try {
echo
1/0;
}
catch(
ErrorException $e){
echo
"got $e";
}
?>

允许在 PHP5 和 PHP7 下以相同的方式检测此错误,尽管 DivisionByZeroError 异常被 ErrorException 掩盖。
-2
Alex
5 年前
此错误仅在整数除法时抛出 - 也就是说,当使用“intdiv”函数或“%”运算符时。在所有情况下,您在除以零时都会收到 E_WARNING。
-41
Manjunath
8 年前
<?php
class MathOperation extends Error
{
protected
$n = 10;

// 尝试获取除零错误对象并将其显示为异常
public function doArithmeticOperation(): string
{
try {
$value = $this->n % 0;
} catch (
DivisionByZeroError $e) {
return
$e->getMessage();
}
}
}

$mathOperationObj = new MathOperation();
echo
$mathOperationObj->doArithmeticOperation();
To Top