Over su stackoverflow, vedo che questo problema è sempre in crescita:
- E_NOTICE? == E_DEBUG, evitando isset () e @ con error_handler più sofisticato
- Come impostare PHP per non controllare l'indice di undefind per $ _GET quando E_NOTICE è attivo?
- Come impedire a PHP di registrare gli errori di avviso di PHP
- Come disattivare tali annunci di PHP 5.3?
Anche Pekka (che offre molti consigli solidi su PHP) è scappato contro il temuto mostro E_NOTICE
e speravo per una soluzione migliore rispetto all'utilizzo di isset()
: isset () e empty () rendono il codice brutto
Personalmente, uso isset()
e empty()
in molti posti per gestire il flusso delle mie applicazioni. Ad 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 di questo tipo:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
mi sembra molto logico. Non sembra gonfiare, sembra un codice stabile. Ma molti sviluppatori attivano le loro applicazioni con E_NOTICE
abilitato, scoprono un sacco di frustranti "indici di array non inizializzati" e poi fanno una smorfia alla prospettiva di controllare le variabili definite e "sporcare" il loro codice con isset()
.
Suppongo che altri linguaggi gestiscano le cose in modo diverso. Parlando dall'esperienza, JavaScript non è educato come PHP. Una variabile non definita in genere fermerà l'esecuzione dello script. Inoltre, (parlando da inesperienza ) sono sicuro che linguaggi come C / C ++ semplicemente rifiuterebbero di compilare.
Quindi, gli sviluppatori PHP sono semplicemente pigri? (non parliamo di te, Pekka, so che stavi rifattorizzando una vecchia applicazione.) O altri linguaggi gestiscono le variabili non definite più con garbo che richiedere al programmatore di controllare prima se sono definite?
(So che ci sono altri E_NOTICE
messaggi oltre alle variabili non definite, ma quelli sembrano essere quelli che causano la maggior dispiacere)
Addendum
Dalle risposte fino ad ora, non sono l'unico a pensare che isset()
non sia un codice gonfiato. 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?