У меня есть этот 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;
теперь вы можете проверить значение и посмотреть, имеет ли оно значение, которое оно имеет