Po przepełnieniu stosu cały czas pojawia się ten problem:
- E_NOTICE? == E_DEBUG, unikając isset () i @ dzięki bardziej wyrafinowanemu modułowi obsługi błędów
- Jak ustawić PHP, aby nie sprawdzał indeksu undefind dla $ _GET, gdy E_NOTICE jest włączony?
- Jak zatrzymać rejestrowanie błędów PHP Notice
- Jak wyłączyć takie powiadomienia PHP 5.3?
Nawet Pekka (który oferuje wiele solidnych porad PHP) natrafił na przerażającego E_NOTICE
potwora i liczył na lepsze rozwiązanie niż użycie isset()
: isset () i empty () sprawiają, że kod jest brzydki
Osobiście używam isset()
iw empty()
wielu miejscach do zarządzania przepływem moich aplikacji. Na przykład:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
Nawet prosty fragment taki jak ten:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
wydaje mi się bardzo logiczne. Nie wygląda jak wzdęcie, wygląda jak stabilny kod. Ale wielu programistów uruchamia swoje aplikacje z E_NOTICE
włączoną funkcją, odkrywa wiele frustrujących powiadomień o „niezainicjowanym indeksie tablic”, a następnie krzywi się na myśl o sprawdzeniu zdefiniowanych zmiennych i „zaśmieceniu” ich kodu isset()
.
Zakładam, że inne języki traktują to inaczej. Mówiąc z doświadczenia, JavaScript nie jest tak uprzejmy jak PHP. Niezdefiniowana zmienna zwykle zatrzymuje wykonywanie skryptu. Ponadto (mówiąc z niedoświadczenia ) jestem pewien, że języki takie jak C / C ++ po prostu odmówiłyby kompilacji.
Czy więc deweloperzy PHP są po prostu leniwi? (nie mówiąc o tobie, Pekka, wiem, że refaktoryzowałeś starą aplikację). Czy też inne języki obsługują niezdefiniowane zmienne z większą wdzięcznością niż wymaganie od programisty sprawdzenia, czy zostały zdefiniowane?
(Wiem, że istnieją inne E_NOTICE
komunikaty oprócz niezdefiniowanych zmiennych, ale te wydają się być tymi, które powodują najwięcej rozczarowania)
Dodatek
Z dotychczasowych odpowiedzi nie jestem jedyną osobą, która uważa, że isset()
to nie wzdęcia. Zastanawiam się teraz, czy są problemy z programistami w innych językach, które odzwierciedlają ten język? Czy jest to wyłącznie kwestia dotycząca kultury PHP?