На стеке потока я вижу эту проблему все время:
- E_NOTICE? == E_DEBUG, избегая isset () и @ с более изощренным обработчиком ошибок
- Как настроить PHP, чтобы он не проверял неопределенный индекс для $ _GET, когда E_NOTICE включен?
- Как остановить PHP от регистрации ошибок PHP Notice
- Как отключить такие уведомления PHP 5.3?
Даже Пекка (который предлагает множество полезных советов по PHP) натолкнулся на страшного E_NOTICE
монстра и надеется на лучшее решение, чем использование isset()
: isset () и empty () делают код уродливым
Лично я использую isset()
и empty()
во многих местах для управления потоком своих приложений. Например:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
Даже простой фрагмент вроде этого:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
кажется очень логичным для меня. Это не похоже на раздувание, это похоже на стабильный код. Но многие разработчики запускают свои приложения с E_NOTICE
включенным, обнаруживают множество разочаровывающих уведомлений о «неинициализированном индексе массива», а затем морщатся от перспективы проверки на наличие определенных переменных и «засорения» их кода isset()
.
Я предполагаю, что другие языки обрабатывают вещи по-другому. Судя по опыту, JavaScript не так вежлив, как PHP. Неопределенная переменная обычно останавливает выполнение скрипта. Кроме того (если говорить неопытно ), я уверен, что такие языки, как C / C ++, просто откажутся от компиляции.
Итак, разработчики PHP просто ленивы? (не говоря о вас, Пекка, я знаю, что вы рефакторинг старого приложения.) Или другие языки обрабатывают неопределенные переменные более изящно, чем требование программиста сначала проверить, определены ли они?
(Я знаю, что есть и другие E_NOTICE
сообщения, помимо неопределенных переменных, но, похоже, именно они вызывают наибольшее огорчение)
Приложение
Из ответов до сих пор, я не единственный, кто думает, что isset()
это не блат кода. Итак, мне интересно, есть ли проблемы с программистами на других языках, которые повторяют этот? Или это исключительно вопрос культуры PHP?