У поточному потоці я бачу, що ця проблема постійно виникає:
- E_NOTICE? == E_DEBUG, уникаючи isset () та @ із більш досконалими помилками__Handler
- Як встановити PHP не перевіряти показник undefind для $ _GET, коли E_NOTICE увімкнено?
- Як зупинити PHP від реєстрації помилок PHP-повідомлення
- Як вимкнути такі повідомлення 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?