Forum und email

Passaggio per riferimento

Si può passare una variabile ad una funzione per riferimento, modificandone gli argomenti. La sintassi è la seguente:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
// $a adesso è 6
?>
Nota che non si usa il segno di riferimento nella chiamata della funzione, ma solo nella definizione. La definizione della funzione basta da sola per passare correttamente un argomento per riferimento. Nelle versioni recenti di PHP si avrà un warning indicante che "Call-time pass-by-reference" è deprecato quando si usa & foo(&$a); .

Le seguenti cose possono essere passate per riferimento:

  • Variabili, es. foo($a)
  • Operatore New, es. foo(new foobar())
  • Riferimento restituito da una funazione, es.

    <?php
    function &bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>
    Vedi anche le spiegazioni sulla restituzione per riferimento.

Qualunque altra cosa non dovrebbe essere passata per riferimento, poichè il risultato sarebbe indefinito. Per esempio, il seguente passaggio per riferimento non è valido:

<?php
function bar() // Nota l'assenza di &
{
    
$a 5;
    return 
$a;
}

foo(bar()); // produce un errore fatale da PHP 5.1.0
foo($a 5); // Expressione: non una variabile
foo(5); // Genera un errore fatale
?>
Questi requisiti sono validi per PHP 4.0.4 e seguenti.