PHP – преобразование всех ошибок в исключения – хорошее или плохое?

Мне было интересно, не считается ли это плохой практикой глобально преобразовывать все ошибки PHP в исключения. Будет использовано следующее:

function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); return false; } 

Предполагаю, что вы можете просто начать использовать «try / catch» вокруг определенных фрагментов кода, которые обычно генерируют ошибки.

Если это не случай Хорошего / Плохого, то какие из Готхов могут возникнуть из этой практики?

Related of "PHP – преобразование всех ошибок в исключения – хорошее или плохое?"

К сожалению, это не будет работать на фатальном / парсе / и т. Д. ошибки …

Не помню точно, но я пробовал это, и в некоторых случаях получил сообщение типа «невозможно исключить исключение без обхода …», но я не могу вспомнить условия для получения этого результата. Но теперь я использую этот путь и полностью удовлетворен.

Используйте исключения для вещей, которые действительно не поддаются контролю.

Хорошо:

 try { if (fopen('file.txt', 'w') === false) { throw new Exception('File could not be opened for write access.'); } } catch (Exception $e) { echo $e->getMessage(); } 

Плохо:

 try { if (strlen($_POST['username']) < 5) { throw new Exception('Username too short'); } } catch (Exception $e) { echo $e->getMessage(); } 

Первый способ хорош, потому что это происходит, когда его что-то, что пользователь или приложение не могут контролировать. Он не может открыть файл, потому что? может быть много причин.

Второй способ – использование перехвата try / catch при использовании trigger_error. Второй способ сводится к тому, что пользователь не знает правил проверки имени пользователя.

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

проработав много лет в Java / .Net в прошлом и в настоящее время php в последние годы, это действительно раздражает иметь все эти различные соглашения об ошибках, в то время как шаблон исключений действительно хорош для всего: начиная с ошибок на уровне приложений, ошибок класса, до системные ошибки – все.

Я действительно вкладываю довольно много работы в попытку управлять всеми типами ошибок, потому что каждая библиотека / функции обрабатывает ошибки по-разному.

Плохая идея. Помимо более медленного и использования большего количества памяти (поскольку создает объект при возникновении каждой ошибки), семантически неправильно для фатальных ошибок. Исключением является неожиданная, но восстанавливаемая ошибка: