Nein, das können Sie nicht. Die Deklaration eines Prameters, der per ref übergeben wird, ist explizit als function something(&$arg1, &$arg2)
. Wenn Sie die Anzahl der Parameter zum Zeitpunkt der Kompilierung nicht kennen, können Sie wie folgt vorgehen:
function something_else($args) {
foreach ($args as $arg)
$GLOBALS[$arg] *= 2;
}
$a = 1;
$b = 3;
something_else(array('a', 'b'));
echo $a . $b; //returns "26"
Im Grunde übergibt der Code der Funktion die Namen der Parameter, die die Funktion ändern soll. $GLOBALS
enthält Verweise auf alle definierten Variablen im globalen Bereich des Skripts. Das bedeutet, dass der Aufruf aus einer anderen Funktion heraus nicht funktioniert:
function something_else($args) {
foreach ($args as $arg)
$GLOBALS[$arg] *= 2;
}
function other_function(){
$a = 1;
$b = 3;
something_else(array('a', 'b'));
echo $a . $b; //returns "13"
}
other_function();
Auslöser bemerkt undefinierte Indizes a
y b
. Ein anderer Ansatz besteht darin, ein Array mit Verweisen auf die Variablen zu erstellen, die von der Funktion geändert werden sollen:
function something_else($args) {
foreach ($args as &$arg)
$arg *= 2;
}
function other_fucntion(){
$a = 1;
$b = 3;
something_else(array(&$a, &$b));
echo $a . $b; //returns "26"
}
other_fucntion();
Beachten Sie die &
en el foreach
Linie. Sie wird benötigt, um nicht eine neue Variable zu erzeugen, die über das Array iteriert. PHP > 5 wird für diese Funktion benötigt.