Su stackoverflow, vedo che questo problema si ripresenta continuamente:
- E_NOTICE? == E_DEBUG, evitando isset () e @ con un gestore_errore più sofisticato
- Come impostare PHP per non controllare l'indice di non trovare $ _GET quando E_NOTICE è attivo?
- Come impedire a PHP di registrare errori di avviso PHP
- Come posso disattivare tali avvisi di PHP 5.3?
Perfino Pekka (che offre molti solidi consigli su PHP) si è scontrato con il E_NOTICE
mostro temuto e sperava in una soluzione migliore rispetto all'utilizzo di isset()
: isset () e empty () rendono il codice brutto
Personalmente, utilizzo isset()
e empty()
in molti luoghi per gestire il flusso delle mie applicazioni. Per esempio:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
Anche un semplice frammento come questo:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
mi sembra molto logico. Non sembra gonfio, sembra un codice stabile. Ma molti sviluppatori accendono le loro applicazioni con E_NOTICE
le funzioni abilitate, scoprono molte frustranti comunicazioni "indice di array non inizializzate" e poi fanno una smorfia alla prospettiva di verificare le variabili definite e di "sporcare" il loro codice isset()
.
Presumo che altre lingue gestiscano le cose in modo diverso. Parlando per esperienza, JavaScript non è educato come PHP. Una variabile non definita in genere interrompe l'esecuzione dello script. Inoltre, (parlando per inesperienza ) sono sicuro che linguaggi come C / C ++ semplicemente rifiuterebbero di essere compilati.
Quindi, gli sviluppatori PHP sono semplicemente pigri? (non parlando di te, Pekka, so che stavi eseguendo il refactoring di una vecchia applicazione.) O altre lingue gestiscono le variabili indefinite in modo più grazioso rispetto al richiedere al programmatore di verificare prima se sono definite?
(So che ci sono altri E_NOTICE
messaggi oltre alle variabili indefinite, ma quelli sembrano essere quelli che causano il maggior dispiacere)
Addendum
Dalle risposte finora, non sono il solo a pensare che isset()
non sia un eccesso di codice. Quindi, mi chiedo ora, ci sono problemi con i programmatori in altre lingue che fanno eco a questo? O è solo un problema di cultura PHP?