это действительно основной вопрос (надеюсь). Большая часть обработки исключений, которую я сделал, была с c #. В c # любой код, который содержит ошибки в блоке catch try, обрабатывается кодом catch. Например
try { int divByZero=45/0; } catch(Exception ex) { errorCode.text=ex.message(); }
Ошибка будет отображаться в errorCode.text. Если бы я попытался запустить тот же код в php:
try{ $divByZero=45/0; } catch(Exception ex) { echo ex->getMessage(); }
Код catch не запускается. Основываясь на моем ограниченном понимании, php нуждается в броске. Разве это не побеждает всю цель проверки ошибок? Разве это не уменьшает попытку catch до утверждения if then? if (деление на ноль) ошибка выброса Пожалуйста, скажите мне, что мне не нужно предвидеть каждую возможную ошибку в попытке поймать бросок. Если да, то все равно, чтобы обработка ошибок php вела себя как c #?
Вы также можете преобразовать все ваши php-ошибки с помощью set_error_handler () и ErrorException в исключения:
function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("exception_error_handler"); try { $a = 1 / 0; } catch (ErrorException $e) { echo $e->getMessage(); }
PHP-try-catch был реализован позже в жизни языка, и поэтому он применяется только к пользовательским исключениям.
Если вы действительно хотите обрабатывать фактические ошибки , установите собственный обработчик ошибок .
Чтобы определить и уловить исключения :
function oops($a) { if (!$a) { throw new Exception('empty variable'); } return "oops, $a"; } try { print oops($b); } catch (Exception $e) { print "Error occurred: " . $e->getMessage(); }
С http://php.net/manual/en/language.exceptions.php
«Внутренние функции PHP в основном используют отчет об ошибках, но только современные объектно-ориентированные расширения используют исключения. Однако ошибки могут быть просто переведены на исключения с ErrorException».
См. Также http://www.php.net/manual/en/class.errorexception.php
Я думаю, что единственный способ справиться с этим в PHP – это написать:
try { if ($b == 0) throw new Exception('Division by zero.'); $divByZero = $a / $b; } catch(Exception ex) { echo ex->getMessage(); }
В отличие от C #, не каждая проблема вызывает исключение в PHP. Некоторые проблемы молча игнорируются (или не молчат – они что-то печатают на выходе), но есть и другие способы их устранения. Я полагаю, это связано с тем, что исключения не были частью языка с первой версии, поэтому существуют некоторые «устаревшие» механизмы.