Di recente mi sono trovato a lavorare con la struttura di un sito piuttosto complesso, costruito interamente sulla base della programmazione a oggetti.
In questa situazione, per evitare errori futuri difficili da scovare, occorre seguire una “manovra” di continuo debug, controllando il codice non appena una classe è pronta per essere usata (salvo miglioramenti futuri).
Per risparmiare tempo, tra gli altri script ho realizzato una classe piuttosto semplice che mi permette di stampare il contenuto dei $_GET e dei $_POST in modo agevole e con un aspetto elegante.
Cosa fa di preciso? Richiamando il metodo voluto, recupera per esempio il $_GET e stampa a video ogni sua chiave con il relativo valore all’interno di una struttura a tabella.
In questo modo avremo alcuni vantaggi non trascurabili:
– facilità di vedere il contenuto di questi array globali in mezzo al codice già stampato a video
– possibilità di stampare a video chiavi e valori richiamando un solo metodo, risparmiando tempo e codice
– possibilità di personalizzare l’aspetto della struttura di stampa
Un metodo simile può essere usato per stampare a video le chiavi e i valori di qualsiasi array, come vedremo più sotto (a dire la verità si potrebbe modificare la classe affinché, con un unico metodo, si possano stampare $_GET, $_POST e qualsiasi array: ma per chiarezza li lasciamo separati).
La struttura della classe
Diamo un’occhiata all’intera classe nella sua forma base. Ogni passaggio è commentato, per cui richiederà soltanto qualche piccola spiegazione.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
class debug_print { //Crea la struttura grafica per la stampa degli elementi di debug //$content è il contenuto da mostrare function debug_structure($content) { $string = ''; $string.='<div class="debug_container"> ' . $content . ' <div> <div class="clear"></div>'; echo $string; } //Stampa tutti i get della pagina entro una struttura grafica predefinita function print_get() { $string = ''; $string.='<div class="debug_field_box"> <div class="debug_field_head">Chiave get</div> <div class="debug_field_head">Valore</div> </div> <div class="clear"></div>'; while (list($key, $value) = each($_GET)) { $string.='<div class="debug_field_box"> <div class="debug_field">' . $key . '</div> <div class="debug_field">' . $value . '</div> </div> <div class="clear"></div>'; } reset($_GET); return $this->debug_structure($string); } } |
Le classi css sono lasciate di proposito generiche: ognuno di voi è libero di formattarle a seconda delle sue esigenze.
Il metodo debug_structure contiene l’aspetto grafico (la “cornice”) della nostra struttura di debug, mentre il metodo print_get si occupa di stampare a video, in forma gradevole, tutte le chiavi e i valori del $_GET.
Il metodo print_get() richiamerà automaticamente il metodo debug_structure().
Per inizializzare la classe e richiamare il metodo ci basterà creare queste due righe di codice:
1 2 |
$debug = new debug_print(); echo $debug->print_get(); |
La stampa di un qualsiasi array
Per la stampa dei valori del $_POST ci basterà modificare il metodo print_get() e chiamarlo print_post(), sostituendo le occorrenze di $_GET con $_POST.
Come dicevo, lo stesso metodo modificato si può utilizzare per creare la stampa a video di un qualsiasi array. L’unica vera modifica è l’aggiunta di un parametro, nel quale passeremo l’array da stampare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Stampa tutti chiave e valore dell'array passato, in una struttura grafica predefinita //$array è l'array passato function print_array($array) { $string = ''; $string.='<div class="debug_field_box"> <div class="debug_field_head">Chiave array</div> <div class="debug_field_head">Valore</div> </div> <div class="clear"></div>'; while (list($key, $value) = each($array)) { $string.='<div class="debug_field_box"> <div class="debug_field">' . $key . '</div> <div class="debug_field">' . $value . '</div> </div> <div class="clear"></div>'; } return $this->debug_structure($string); } |