Parameterübergabe per Referenz

Man kann Variablen an Funktionen per Referenz übergeben, so dass die Funktion ihre Argumente modifizieren kann. Dazu benutzt man folgende Syntax:

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

$a=5;
foo($a);
// $a ist 6
?>
Zu beachten ist, dass kein Referenz-Zeichen beim Funktionsaufruf steht, nur in der Funktionsdefinition. Diese allein ist ausreichend, um das Argument per Referenz zu übergeben. In neueren PHP-Versionen gibt es eine Warnung, dass die Benutzung von "Call-time pass-by-reference" mit Hilfe von & in foo(&$a); veraltet ist.

Folgende Dinge können per Referenz übergeben werden:

  • Variablen, zum Beispiel foo($a)
  • "New"-Ausdrücke, zum Beispiel foo(new foobar())
  • Referenzen, zurückgegeben von einer Funktion, zum Beispiel:

    <?php
    function &bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>
    Es gibt detailliertere Erläuterungen zur Rückgabe by-reference.

Alle anderen Ausdrücke sollte nicht per Referenz übergeben werden, da das Ergebnis undefiniert ist. Folgende Beispiele sind etwa ungültig:

<?php
function bar() // Beachte das fehlende &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Fatal error seit PHP 5.0.5

foo($a 5); // Ausdruck, keine Variable
foo(5); // Fatal error
?>
Diese Anforderungen gelten für PHP 4.0.4 und später.