12
votes

How to suppress the "Division by zero" error and set the result to null for the whole application? By saying "for the whole application", I mean it is not for a single expression. Instead, whenever a "Division by zero" error occurs, the result is set to null automatically and no error will be thrown.

4
If you're looking for c++ operator overloading possibility, so the php doesn't support it, see the discussion here: stackoverflow.com/questions/787692/operator-overloading-in-phpIgor
Suppressing errors is generally considered a bad practice. You can use try and catch, but not @. You should write your code in such way that incorrect values are sanitized and no errors or warnings are thrown by standard execution of your code.Mike
in SQL Server, there is a little trick NULLIF() bennadel.com/blog/…Jaider
You could use a custom exception/error handler to catch it and set the result to 0 ... PHP 7 provides a 'DivisionByZeroError' exception class php.net/manual/en/class.divisionbyzeroerror.php ... in previous versions, it may be possible to convert the corresponding error to an exception and then set a handler.Aaron Wallentine

4 Answers

22
votes

This should do the trick.

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

outputs

NULL

See the refs here error controls.

EDIT

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

In any place substitute 1/0 by the function call division(1,0).

EDIT - Without third variable

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

    return $a/$b;
}
5
votes

Simple as.. well 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
} 

As a function

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;
}

Use it like this

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

I can't think of a way to set it whenever there's division but I'd use the function and rename it to something like "d" so it's short!

5
votes

This is a horrible solution, but thankfully, you won't use it because the variable is set to false instead of null.

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

set_error_handler('ignore_divide_by_zero', E_WARNING);

In your case, I'd create a function that does your division for you.

2
votes

What about using a ternary operator, like so:

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