Signatur
Beschreibung
func_get_args() liefert ein numerisch indiziertes Array mit allen Werten, die beim Aufruf der aktuellen Funktion übergeben wurden. Dabei werden auch Argumente berücksichtigt, die über die formalen Parameter der Funktionssignatur hinausgehen – das Verhalten ähnelt einem impliziten Variadic-Parameter.
Die Funktion ist besonders nützlich, wenn eine Funktion eine beliebige Anzahl von Argumenten akzeptieren soll und man auf alle gesammelten Werte als Array zugreifen möchte. Ab PHP 5.6 ist der Einsatz von ...$args (Spread-Operator / Variadic-Syntax) jedoch die bevorzugte, ausdrucksstärkere Alternative.
Ein typischer Anwendungsfall ist das Weiterleiten aller Argumente an eine andere Funktion mittels call_user_func_array() oder func_get_args() in Kombination mit func_num_args(). Außerdem kann die Funktion in Wrapperfunktionen genutzt werden, um alle Argumente zu protokollieren oder zu validieren.
Wichtig: func_get_args() darf nur innerhalb einer Funktion oder Methode aufgerufen werden; ein Aufruf im globalen Scope erzeugt einen Fehler. Außerdem gibt die Funktion Argumente by value zurück, nicht by reference.
Rückgabewert
false.Beispiele
Alle Argumente ohne deklarierten Parameter einsammeln
<?php
function summe() {
$args = func_get_args();
$summe = 0;
foreach ($args as $zahl) {
$summe += $zahl;
}
return $summe;
}
echo summe(1, 2, 3, 4, 5); // 15
echo PHP_EOL;
echo summe(10, 20); // 30
Wrapper-Funktion, die Argumente weiterleitet (Legacy-Stil)
<?php
function log_und_aufruf(callable $callback) {
// Alle Argumente außer $callback sammeln
$args = func_get_args();
array_shift($args); // erstes Argument (callable) entfernen
echo 'Aufruf mit Argumenten: ' . implode(', ', $args) . PHP_EOL;
return call_user_func_array($callback, $args);
}
$ergebnis = log_und_aufruf('array_sum', [3, 7, 10]);
echo 'Ergebnis: ' . $ergebnis . PHP_EOL;
Vergleich mit moderner Variadic-Syntax (ab PHP 5.6)
<?php
// Legacy-Stil mit func_get_args()
function alt() {
$args = func_get_args();
return array_sum($args);
}
// Moderner Stil mit Spread-Operator
function modern(int ...$zahlen): int {
return array_sum($zahlen);
}
echo alt(1, 2, 3); // 6
echo PHP_EOL;
echo modern(1, 2, 3); // 6
// Wichtig · Fallstricke
Aufruf außerhalb einer Funktion: Wird func_get_args() im globalen Scope aufgerufen, gibt PHP eine Warnung aus (Called from the global scope) und der Rückgabewert ist false.
Argumente by value: Die zurückgegebenen Werte sind Kopien; Änderungen am Array beeinflussen die Originalargumente nicht. Um by-reference-Argumente zu modifizieren, muss man direkt auf die Parameter-Variablen zugreifen.
Empfehlung ab PHP 5.6: Bevorzuge ...$args (Variadic-Parameter), da dieser Ansatz typsicher, klarer lesbar und IDE-freundlicher ist. func_get_args() ist weiterhin gültig, wirkt aber in modernem Code veraltet.