【问题标题】:How to suppress the "Division by zero" error and set the result to null for the whole application?如何抑制“除以零”错误并将整个应用程序的结果设置为 null?
【发布时间】:2025-12-13 18:50:02
【问题描述】:

如何抑制“除以零”错误并将结果设置为空整个应用程序?通过说“整个应用程序”,我的意思是它不是一个单一的表达方式。相反,每当发生“除以零”错误时,结果会自动设置为 null 并且不会抛出任何错误。

【问题讨论】:

  • 如果您正在寻找 c++ 运算符重载的可能性,那么 php 不支持它,请参阅此处的讨论:*.com/questions/787692/operator-overloading-in-php
  • 抑制错误通常被认为是一种不好的做法。您可以使用trycatch,但不能使用@。您应该以这样一种方式编写代码,即清理不正确的值,并且代码的标准执行不会引发错误或警告。
  • SQL Server,有一个小技巧NULLIF()bennadel.com/blog/…
  • 您可以使用自定义异常/错误处理程序来捕获它并将结果设置为 0 ... PHP 7 提供了一个 'DivisionByZeroError' 异常类 php.net/manual/en/class.divisionbyzeroerror.php ... 在以前的版本中,它可能可以将对应的错误转化为异常,然后设置处理程序。

标签: php


【解决方案1】:

这应该可以解决问题。

$a = @(1/0); 
if(false === $a) {
  $a = null;
}
var_dump($a);

输出

NULL

在此处查看参考资料error controls

编辑

function division($a, $b) {
    $c = @(a/b); 
    if($b === 0) {
      $c = null;
    }
    return $c;
}

在任何地方用函数调用division(1,0)替换1/0

编辑 - 没有第三个变量

function division($a, $b) {         
    if($b === 0)
      return null;

    return $a/$b;
}

【讨论】:

  • 哇,这么简单(我希望我能想到),但它是否将其设置为 null?
  • 这是最好的一般概念。但是,当a == 0 时它会失败。您应该将条件更改为if ($c === false)。但实际上,您应该只检查$b == 0。 ;)
  • 即使这不是我想要的,也可能没有更好的解决方案。
  • 你错过了$符号函数除法(a,b)一定是除法($a,$b)
  • 单行程序:$v = ( @($a/$b) ) ?: null;。单行函数:return ( $b === 0 ) ? null : $a/$b;
【解决方案2】:

简单到......好吧abc*123-pi

$number = 23;
$div = 0;

//If it's not 0 then divide
if($div != 0)
  $result = $number/$div;//is set to number divided by x
}
//if it is zero than set it to null
else{
  $result = null;//is set to null
} 

作为函数

function mydivide($divisior, $div){
   if($div != 0)
     $result = $divisor/$div;//is set to number divided by x
   }
   //if it is zero than set it to null
   else{
     $result = null;//is set to null
   }
   return $result;
}

使用像这样

$number = mydivide(20,5)//equals four

我想不出一种方法来在有除法时设置它,但我会使用该函数并将其重命名为类似 "d" 所以很短!

【讨论】:

    【解决方案3】:

    这是一个糟糕的解决方案,但幸运的是,您不会使用它,因为变量设置为 false 而不是 null

    function ignore_divide_by_zero($errno, $errstring)
    {
      return ($errstring == 'Division by zero');
    }
    
    set_error_handler('ignore_divide_by_zero', E_WARNING);
    

    在你的情况下,我会创建一个函数来为你做除法。

    【讨论】:

      【解决方案4】:

      如何使用三元运算符,如下所示:

      $a = $c ? $b/$c : null;
      

      【讨论】:

      • 这并不能真正处理“整个应用程序”方面。
      最近更新 更多