Parliamo ora di come il PHP passa gli argomenti alle funzioni quando queste vengono chiamate.

Per default tutti i parametri vengono sempre passati per valore ciò vuol dire che al momento della chiamata viene fatta una copia del valore di ogni variabile e solo questa copia viene usata dalla funzione.

Così facendo se all’interno della funzione il valore viene in qualche modo modificato, il cambiamento non si propaga anche dopo la chiamata.

<?php
 
/* funzione di esempio */
 
function modifica_i_parametri ($p1, $p2)
{
  $p1 = 10;
  $p2 *= $p1;
}
 
/* variabili da modificare */
 
$a = 5;
$b = 7;
 
/* Chiama una funzione che tenta di modificare
   i parametri ma $a e $b rimangono uguali anche dopo
   la chiamata perché il passaggio è per valore  */
 
modifica_i_parametri ($a, $b);
 
?>

Ora, come abbiamo visto, questo può essere utile ma a volte capita di volere che anche la variabile sorgente risenta del cambiamento, come fare quindi?
Basta usare il passaggio per riferimento. Grazie all’operatore & è possibile passare una variabile alla funzione per riferimento.

Se questo operatore viene messo nella dichiarazione della funzione l’operatore verrà passato sempre per riferimento mentre se inserito solo al momento della chiamata starà a noi decidere quando usarlo.

<?php
 
/* funzione che modifica sempre il suo parametro  */
 
function metti10 (&$p)
{
  $p = 10;
}
 
/* questa funzione invece non riesce sempre */
 
function metti100 ($x)
{
  $x = 100;
}
 
/* esempi */
 
$a = 9;
 
metti10 ($a);   /* ora $a contiene 10 */
 
metti100 ($a);  /* $a contiene ancora 10 */
 
metti100 (&$a); /* ora $a contiene 100 visto che abbiamo
                   specificato il passaggio per riferimento */
 
?>

vicius