Я надеялся, что вы, ребята, поможете мне в этом: как справляться с ошибками и что вернуться? То, что я делаю, большую часть времени, делает мои функции / методы возвращением двух возможных значений. Предполагаемое значение в случае успеха и FALSE в случае сбоя. Таким образом, я могу использовать:
if(function()) { ... } else { ... }
Я не люблю использовать исключения, потому что, как правило, они печатают что-то и прерывают функционирование потока приложения. Конечно, я могу заставить их что-то вернуть и показать предупреждение с ошибкой. Но это слишком много работы. И я не люблю Покемона так много, чтобы попытаться поймать их всех. (Awsum тема, кстати)
Еще одна вещь, о которой я беспокоюсь, – это кодировать что-то «управляемость ошибками». Как мы знаем, пользователи могут делать почти что угодно, чтобы вызвать непредвиденную ситуацию, а код, ожидающий, что эти ошибки слишком утомительны и, откровенно говоря, делает меня параноидальным. XD
Я прошу прощения за любые английские ошибки (я не пишу слишком часто). Спасибо, что прочитали этот вопрос. : D
PS: Я читал о защитном программировании и других вопросах, но они не совсем отвечают на мои сомнения.
Может быть, вы не найдете моего ответа полезным, потому что я не разработчик php, так или иначе, я попытаюсь дать вам общие советы, поскольку дебаты об обработке ошибок распространены на любом языке программирования.
1) Сначала попробуйте избежать фактической необходимости обработки ошибок. Это означает, что вы пытаетесь закодировать таким образом, чтобы условия ошибки были немногочисленными. Простой пример: здравый смысл заключается в том, что попытка очистить пустую коллекцию не должна приводить к ошибке.
2) Определите, что такое поддерживаемый отказ, чем неподдерживаемый . Поддерживаемый отказ – это условие ошибки, которое вы действительно хотите отслеживать и обрабатывать как часть логики программы. Неспособным отказом будет условие ошибки, которое на самом деле является ошибкой кода. Например: вы пытаетесь найти элемент на карте, и это часть логики вашей программы, в которой должен находиться конкретный элемент. Нет смысла добавлять код, чтобы проверить, был ли элемент там, и принести ошибку, если это не так: вы сделали предположение, что оно есть.
После того, как вы поняли эти два момента, я уверен, что вы поймете, почему исключения настолько полезны для создания более чистого и более эффективного кода. Хитрость заключается в следующем: сделайте свой код для привлечения как можно большего количества исключений (опять же: различные поддерживаемые и неподдерживаемые условия ошибки для выбора того, какие исключения действительно нужны) и поймать их только в самой внешней области, где пользователь приложения взаимодействует с ним и 1) следует предупредить, 2) должен решить, что делать. Программно поймать excpetion без взаимодействия с пользователем, в большинстве случаев, плохо, потому что это заставляет разработчика думать, что catching exceptions эффективен, как условно, что-то делает (if-then-else), когда возникает условие ошибки, когда это не дело. Исключения не будут вызывать накладные расходы для вашего приложения, пока они не будут выброшены.
Вы пробовали работать с инструментами регистрации ошибок PHP? http://php.net/manual/en/book.errorfunc.php
Затем вы можете использовать такие вещи, как error_log (), чтобы стрелять своими пользовательскими ошибками в любой файл журнала, который вы хотите.
Вы должны использовать Exceptions
. Они ничего не печатают, если вы этого не хотите. По крайней мере, это будет лучшее разделение вашего реального кода и обработки ошибок.
Вы правы, если функция возвращает значение или возвращает false
при ошибке, это не лучший стиль (да, я знаю, что это, вероятно, сделано много).
Если вы хотите узнать больше о хорошей практике кодирования, я предлагаю прочитать « Чистый код» Роберта Мартина .