如何抑制"除以零"错误并将整个应用程序的结果设置为null?

Eth*_*han 10 php

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

Igo*_*gor 20

这应该可以解决问题.

$a = @(1/0); 
if(false === $a) {
  $a = null;
}
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

输出

NULL
Run Code Online (Sandbox Code Playgroud)

请参阅refs here 错误控件.

编辑

function division($a, $b) {
    $c = @(a/b); 
    if($b === 0) {
      $c = null;
    }
    return $c;
}
Run Code Online (Sandbox Code Playgroud)

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

编辑 - 没有第三个变量

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

    return $a/$b;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的一般概念.但是,当a == 0时,它会失败.你应该将条件改为`if($ c === false)`.但实际上,你应该检查`$ b == 0`.;) (2认同)

Mar*_*lor 5

简单如..好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
} 
Run Code Online (Sandbox Code Playgroud)

作为一个功能

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;
}
Run Code Online (Sandbox Code Playgroud)

像这样使用

$number = mydivide(20,5)//equals four
Run Code Online (Sandbox Code Playgroud)

我无法想到一种方法来设置它,只要有分区但我会使用该功能并将其重命名"d"之类的东西,所以它很短!


Mat*_*hew 5

这是一个可怕的解决方案,但幸运的是,你不会使用它,因为变量设置为false而不是null.

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

set_error_handler('ignore_divide_by_zero', E_WARNING);
Run Code Online (Sandbox Code Playgroud)

在你的情况下,我会创建一个功能,为你做分工.