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-php - Igor
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;