Какие существуют лучшие способы избежать избытка isset()
в логике приложения и сохранить возможность видеть сообщения отладки (E_NOTICE), когда это необходимо?
Презумпция первая: E_NOTICE не является ошибкой, она неверна и должна быть E_DEBUG. Однако, хотя это верно для неустановленных переменных (PHP по-прежнему является языком сценариев), некоторые функции файловой системы и т.д. Бросают их тоже. Поэтому желательно разработать с помощью E_NOTICEs.
Однако не все отладочные уведомления полезны, поэтому это общая (неудачная) идиома PHP для вводит isset()
и @во всей логике приложения. Конечно, существует много допустимых вариантов использования isset/empty, но в целом это кажется сильной синтаксической солью и может фактически препятствовать отладке.
Вот почему я в настоящее время использую букмарклет error_reporting и немой переключатель включения/выключения:
// javascript:(function(){document.cookie=(document.cookie.match(/error_reporting=1/)?'error_reporting=0':'error_reporting=1')})()
if (($_SERVER["REMOTE_ADDR"] == "127.0.0.1")
and $_COOKIE["error_reporting"])
{
error_reporting(E_ALL|E_STRICT);
}
else {/* less */}
Однако это все еще оставляет мне проблему с слишком большим количеством уведомлений для поиска через один раз. В качестве обходного пути я мог бы использовать оператор подавления ошибок @. В отличие от isset() он не полностью убивает параметры отладки, потому что пользовательский обработчик ошибок все равно может получать подавленные E_NOTICE. Таким образом, это может помочь отделить ожидаемые отладочные уведомления от потенциальных проблем.
Но это также неудовлетворительно. Отсюда вопрос. Кто-нибудь использует или знает более сложный обработчик ошибок PHP. Я представляю что-то, что:
- выводит нефильтрованные ошибки/предупреждения/уведомления (с абсолютным позиционированием CSS?)
- и AJAX - не разрешить проверку и подавление на стороне клиента.
- но также сохраняет список фильтров ожидаемых и " одобренных" уведомлений или предупреждений.
Конечно, в какой-то инфраструктуре уже должен быть обработчик ошибок пользователя.
- В основном я заинтересован в управлении предупреждениями/уведомлениями.
- Полное подавление E_NOTICE действительно не требуется.
- E_NOTICES . Только меньше. По умолчанию выделяют те, которые мне могут быть интересны, а не ожидаемые.
- Если я запускаю без параметра order =, ожидается ожидаемое время ожидания. Из-за чего мне не нужно сообщать об этом несколько раз.
- Однако в режиме полной отладки я хочу видеть наличие переменных undefined в присутствии (или более интересного отсутствия) указанных отладочных уведомлений. → Это то, за что я думаю. Избегание isset приводит к неявным заявлениям печати.
- Также понимаем, что это касается случаев, когда удобна обычная семантика обработки форм PHP, а не области приложений, где строгость является обязательной.
О, мой, кто-то, пожалуйста, помогите переписать это. Длительное объяснение не работает.