Signatur
Beschreibung
func_get_arg() ermöglicht es, innerhalb einer Funktion auf ein einzelnes Argument zuzugreifen, das beim Aufruf übergeben wurde – auch auf Argumente, die über die definierten Parameter hinausgehen. Dies ist besonders nützlich beim Implementieren von Funktionen mit variabler Argumentanzahl, bevor der ...-Spread-Operator (PHP 5.6) eingeführt wurde.
Der Parameter $position ist nullbasiert, d. h. das erste Argument hat den Index 0. Wird ein Index außerhalb des gültigen Bereichs übergeben, gibt die Funktion false zurück und erzeugt eine Warnung. Die Funktion muss zwingend innerhalb einer Funktion oder Methode aufgerufen werden – ein Aufruf im globalen Geltungsbereich führt zu einem Fehler.
In modernem PHP (ab 5.6) ist der Einsatz von variadischen Parametern (...$args) oder func_get_args() in den meisten Fällen die sauberere und leserlichere Alternative. func_get_arg() bleibt aber nützlich, wenn nur gezielt ein einzelnes Argument abgerufen werden soll, ohne alle Argumente als Array zu laden.
Seit PHP 7 kann die Funktion auch mit Argument-Werten umgehen, die innerhalb der Funktion modifiziert wurden – sie liefert dann den aktuellen Wert zum Zeitpunkt des Aufrufs, nicht den ursprünglich übergebenen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $position Pflicht | int | Nullbasierter Index des gewünschten Arguments. 0 entspricht dem ersten übergebenen Argument. |
Rückgabewert
$position größer als die Anzahl der übergebenen Argumente oder wird die Funktion außerhalb einer Funktion aufgerufen, wird false zurückgegeben und eine Warnung ausgegeben.Beispiele
Zugriff auf einzelne Argumente einer variablen Argumentliste
<?php
function summe() {
$total = 0;
$anzahl = func_num_args();
for ($i = 0; $i < $anzahl; $i++) {
$total += func_get_arg($i);
}
return $total;
}
echo summe(10, 20, 30, 40); // 100
Gezielter Zugriff auf ein optionales Extra-Argument
<?php
function verbinde(string $trennzeichen, string ...$teile): string {
return implode($trennzeichen, $teile);
}
// Älterer Stil mit func_get_arg für optionales Argument
function verbindeLegacy(string $a, string $b) {
$trennzeichen = func_num_args() > 2 ? func_get_arg(2) : '-';
return $a . $trennzeichen . $b;
}
echo verbindeLegacy('Hallo', 'Welt'); // Hallo-Welt
echo PHP_EOL;
echo verbindeLegacy('Hallo', 'Welt', ' | '); // Hallo | Welt
Verhalten bei modifiziertem Argument (ab PHP 7)
<?php
function testModifikation($wert) {
$wert = $wert * 2; // Argument wird modifiziert
echo func_get_arg(0); // Gibt den modifizierten Wert aus
}
testModifikation(5);
// Wichtig · Fallstricke
Geltungsbereich: func_get_arg() darf ausschließlich innerhalb einer Funktion oder Methode verwendet werden. Der Aufruf im globalen Scope erzeugt einen fatalen Fehler.
Moderne Alternative: Ab PHP 5.6 sollten variadische Parameter (function foo(mixed ...$args)) bevorzugt werden, da sie typsicherer und lesbarer sind. func_get_arg() ist primär für Legacy-Code oder sehr spezifische Situationen relevant.
Typdeklarationen: func_get_arg() ignoriert Typdeklarationen – es wird immer der tatsächlich übergebene Wert geliefert, unabhängig vom deklarierten Parametertyp.