Ninuzzo Programming Page / Home / Linguaggio PHP / Debugging
Fine Pagina
Software

pftp
php-msql-admin

Tpad
WikiLearn


Webmastering

Allineare un applet
Entities-list
Mappa dei 140 colori
Window creator


Linguaggi

C
C++
Kiss: my programming language!
PHP
Tcl/Tk
Teoria
XML


Utility

Calendario
Calcolatrice
Giochi
Info su questo server
Mirror di LDR
Motori di ricerca
Ninuzzo Link Collection


Linux - Unix

Apache Log Rotation
Apache+PHP+MySQL
Cache DNS con BIND
Demo grafici
Firewall
Htdig
info-tut
permessi
Samba
Shell
Slide del corso
Wget tutorial


Scienza

Matematica, Fisica


Newsletter: tips, links, novità del sito.
Archivio messaggi

Admin
Liberiamo l'hardware

Debugging con PHP: due funzioni utili

di Antonio Bonifati <antonio.bonifati@libero.it>

Capita spesso che uno script non funziona e vorreste sapere i valori di alcune variabili ad un certo punto. Se volete sapere il valore di una variabile intera $i basta ovviamente fare:
echo $i;
ma se le variabili sono strutture dati complesse, come array bidimensionali od oggetti complicati? E' noioso ed una perdita di tempo scriversi di volta in volta il codice che effettua la stampa.

Per questo PHP mette a disposizione due funzioni:
void var_dump (mixed expression)
void print_r (mixed expression)
var_dump stampa informazioni (valori e tipi) in un formato strutturato relativi all'espressione passata come argomento. Gli array vengono esplorati ricorsivamente e i valori stampati vengono indentati per mostrare visivamente la struttura. print_r è simile a var_dump solo che non stampa informazioni sui tipi che non sono spesso necessarie.

Mi sono fatto una funzione wrapper che aggiunge qualche tag HTML per una migliore resa dell'output:
function _var_dump($v)
{
   print('<pre style="background: #E0E0E0; color: #000000">');
   var_dump($v);
   print('</pre>');
}
e un'altra simile per print_r:
function _print_r($v)
{
   print('<pre style="background: #E0E0E0; color: #000000">');
   print_r($v);
   print('</pre>');
}
Convengo di usare _ davanti al nome delle funzioni anche perché mi ricorda che sono chiamate fatte a scopo di debugging. Naturalmente potete cambiare i colori come volete. Ecco ad es. come viene stampato un certo array associativo da _var_dump ;)
$p = array( 'nome' => 'Antonio',
   'cognome' => 'Bonifati',
   'età' => '24',
   'professione' => 'programmatore PHP'
);

_var_dump($p);

array(4) {
  ["nome"]=>
  string(7) "Antonio"
  ["cognome"]=>
  string(8) "Bonifati"
  ["età"]=>
  string(2) "24"
  ["professione"]=>
  string(17) "programmatore PHP"
}
Mentre se avete una variabile intera:
$i=4;
_var_dump($i);
int(4)
Quest'altro è un array associativo che ne contiene altri, stampato da _print_r:
$voti = array(
   'Mario' => 6,
   'Antonio' => array(4, 2, 3),
   'Laura' => 8
);

_print_r($voti);
Array
(
    [Mario] => 6
    [Antonio] => Array
        (
            [0] => 4
            [1] => 2
            [2] => 3
        )

    [Laura] => 8
)
Altro esempio: stampa di un oggetto.
<?php
class Cart {
    var $items;  // Items in our shopping cart
   
    // Add $num articles of $artnr to the cart
 
    function add_item ($artnr, $num) {
        $this->items[$artnr] += $num;
    }
}

$cart = new Cart;
$cart->add_item("10", 1);
$cart->add_item("20", 7);
_print_r($cart);
_var_dump($cart);
?>
cart Object
(
    [items] => Array
        (
            [10] => 1
            [20] => 7
        )

)
object(cart)(1) {
  ["items"]=>
  array(2) {
    [10]=>
    int(1)
    [20]=>
    int(7)
  }
}
Inizio Pagina
Copyleft 2001 Antonio Bonifati. Tutto il materiale è distribuito con licenza GNU GPL.