Мне было интересно, не считается ли это плохой практикой глобально преобразовывать все ошибки PHP в исключения. Будет использовано следующее:
function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); return false; }
Предполагаю, что вы можете просто начать использовать «try / catch» вокруг определенных фрагментов кода, которые обычно генерируют ошибки.
Если это не случай Хорошего / Плохого, то какие из Готхов могут возникнуть из этой практики?
К сожалению, это не будет работать на фатальном / парсе / и т. Д. ошибки …
Не помню точно, но я пробовал это, и в некоторых случаях получил сообщение типа «невозможно исключить исключение без обхода …», но я не могу вспомнить условия для получения этого результата. Но теперь я использую этот путь и полностью удовлетворен.
Используйте исключения для вещей, которые действительно не поддаются контролю.
Хорошо:
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 в последние годы, это действительно раздражает иметь все эти различные соглашения об ошибках, в то время как шаблон исключений действительно хорош для всего: начиная с ошибок на уровне приложений, ошибок класса, до системные ошибки – все.
Я действительно вкладываю довольно много работы в попытку управлять всеми типами ошибок, потому что каждая библиотека / функции обрабатывает ошибки по-разному.
Плохая идея. Помимо более медленного и использования большего количества памяти (поскольку создает объект при возникновении каждой ошибки), семантически неправильно для фатальных ошибок. Исключением является неожиданная, но восстанавливаемая ошибка: