|
|
|
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:
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:
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)
}
}
|
|
|