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_NOTICEmostro 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_NOTICEle 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_NOTICEmessaggi 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?