Durante l'esecuzione di uno script php potrebbe capitare di riceve in maniera apparentemente immotivata la seguente notifica o warning "Notice: Undefined variable nome_variabile ... in php", che in semplici parole vuol dire che l'interprete php ha rilevato all'interno del codice l'uso di una variabile non definita.
Andare a risolvere (fix) questo "errore" e far scomparire la notifica è davvero semplice, andiamo a vedere subito come fare senza perderci ulteriormente in chiacchiere.
La notifica da parte dell'interprete php del messaggio "Notice: Undefined variable" compare a seguito dell'uso di una variabile non precedentemente dichiarata ed opportunamente inizializzata; se ad es. volessimo generare server side una lista html tramite gli elementi di un array, avremmo:
<?php
foreach($items as $li_item)
$list.='<li>'.$li_item.'</li>';
?>
In questo caso riceveremmo l'errore "Notice: Undefined variable: $list in ..." poiché la utilizzo direttamente all'interno del ciclo for come concatenazione di stringa senza prima averla dichiarata ed inzializzata, se invece io avessi scritto magari così:Fin qui tutto regolare, non compare alcun warning e possiamo procedere regolarmente col nostro script, ci è servito solo per ricordare il modo in cui definiamo una costante in php a mezzo define, ma proviamo ad osservare il pezzettino di codice sottostante dove non definiamo alcuna costante e facciamo volutamente un errore, vediamo cosa succede:
<?php
$list='';
foreach($items as $li_item)
$list.='<li>'.$li_item.'</li>'
$list.='</ul>';
...
?>
Questo script è corretto e non mostrerà alcuna notifica poiché come già detto la variabile viene dapprima dichiarata ed inizializzata (va bene anche stringa vuota a seconda dei casi).
Potrebbe capitare però di ricevere una notfica analoga ma dal significato leggermente diverso, come questa "Notice: Undefined index" senza specificare il nome di una variabile, in questo caso l'interprete php sta facendo riferimento all'assenza di definizione dell'indice di un array (associativo) o di una struttura a record come il resultset di una query al database, nel primo caso non è stato definito l'indice dell'array associativo che viene usato, nel secondo caso quello del resultset invece è molto probabile che manca o è digitato sbagliato il nome della colonna alla quale si desidera fare riferimento all'interno del resultset utilizzato, ad es. a me è capitato di scrivere $row['descripton'] anziché 'description' saltando involontariamente una 'i' e ricevere pertano la notifica di undefined index, e mi ci sono voluti i miei 10 minuti buoni per accorgermi dell'errore banale, pertanto attenzione.
Le notifiche ed i warning php non sono degli errori gravi e bloccanti, di fatti il programma o applicativo che sia, va ugualmente in esecuzione, e queste notifiche possono volendo essere disabilitate, basta andare nel file php.ini ed individuare la riga:
error_reporting = E_ALL & ~E_NOTICE
Rimuovi la voce E_NOTICE per non vedere più le notifiche, oppure commenta (con un ;) l'intera ariga per disabilitare qualsiasi messaggio di errore (anche critico) da parte di php.
Bada bene però, che nascondere le notifiche, anche non critiche come i 'Notice' non è il modo migliore di procedere, poiché anche se l'interprete php li lascia passare consentendo ugualmente l'esecuzione dello script, sono pur sempre degli errori, e sarebbe meglio risolverli, che poi come abbiamo visto sono pressocché banali, individuare ed eliminare un errore del tipo "Notice: Undefined variable" è talvolta un gioco da ragazzi, a maggior ragione ora che se ne conoscono le ragioni del suo manifestarsi.