Предупреждение «Разделить на Zero» не попадает в блок try / catch PHP

У меня есть этот PHP-код. Всякий раз, когда y становится равным нулю, вместо предупреждения об исключении появляется предупреждение. Что-то не так с моим кодом?

 try { return($x % $y); throw new Exception("Divide error.."); } catch(Exception $e){ echo "Exception:".$e->getMessage(); } 

Я получил это предупреждение:

 Warning: Division by zero in file.php 

Блок catch не запускается. Что я делаю не так?

Предупреждение не является исключением. Предупреждения не могут быть обнаружены с помощью методов обработки исключений. Ваше собственное исключение никогда не бросается, поскольку вы всегда return раньше.

Вы можете подавлять предупреждения с помощью оператора @ такого как @($x % $y) , но то, что вы действительно должны сделать, это убедиться, что $y не становится 0.

То есть:

 if (!$y) { return 0; // or null, or do something else } else { return $x % $y; } 

Да, вы выполняете return перед throw . Следовательно, throw никогда не выполняется, и никакое исключение не бросается и не захватывается.

вот как это должно быть сделано

 $value; try { $value = $x%$y; } catch(Exception $e){ throw new Exception("Divide error.."); echo "Exception:".$e->getMessage(); } return $value 

Но так как вы получаете предупреждение, если хотите скрыть ошибку и обработать ее дискретно. Вы можете использовать знак @

 $value = @$x%$y; 

теперь вы можете проверить значение и посмотреть, имеет ли оно значение, которое оно имеет