Signatur
Beschreibung
func_num_args() ermittelt innerhalb einer Funktion, wie viele Argumente beim konkreten Aufruf übergeben wurden. Dies ist besonders nützlich für Funktionen mit variabler Argumentanzahl, bei denen nicht alle Parameter explizit in der Signatur deklariert sind.
Zusammen mit func_get_arg() und func_get_args() bildet diese Funktion die klassische Möglichkeit, variadische Funktionen vor der Einführung des ...-Operators (PHP 5.6) zu implementieren. Seit PHP 5.6 ist der Einsatz von ...$args in der Funktionssignatur der modernere und übersichtlichere Ansatz.
Die Funktion kann ausschließlich innerhalb einer Funktion oder Methode aufgerufen werden; ein Aufruf auf oberster Skriptebene erzeugt eine Warnung und gibt -1 zurück.
- Gibt die Gesamtanzahl der übergebenen Argumente als
intzurück. - Gibt
-1zurück, wenn sie außerhalb einer Funktion aufgerufen wird. - Zählt alle tatsächlich übergebenen Argumente, auch wenn die Funktion weniger Parameter deklariert hat.
Rückgabewert
-1 zurückgegeben und eine Warnung ausgelöst.Beispiele
Einfache Nutzung zur Argumentanzahl-Prüfung
<?php
function begruesse() {
$anzahl = func_num_args();
echo "Anzahl der übergebenen Argumente: $anzahl\n";
for ($i = 0; $i < $anzahl; $i++) {
echo " Argument $i: " . func_get_arg($i) . "\n";
}
}
begruesse('Alice', 'Bob', 'Charlie');
Variadische Summenfunktion (klassischer Stil vor PHP 5.6)
<?php
function summe() {
$summe = 0;
$anzahl = func_num_args();
for ($i = 0; $i < $anzahl; $i++) {
$summe += func_get_arg($i);
}
return $summe;
}
echo summe(1, 2, 3, 4, 5);
Moderner Vergleich mit dem Spread-Operator (PHP 5.6+)
<?php
// Moderne Variante mit ...$args (empfohlen ab PHP 5.6)
function summeModern(int ...$args): int {
return array_sum($args);
}
echo summeModern(1, 2, 3, 4, 5);
// Wichtig · Fallstricke
Veralteter Ansatz: Seit PHP 5.6 sollte für neue Projekte der ...-Spread-Operator in der Funktionssignatur verwendet werden (function foo(...$args)). Dieser ist typsicherer, besser lesbar und vollständig kompatibel mit statischen Analysetools.
Achtung bei Methodenaufruf außerhalb von Funktionen: Ein Aufruf von func_num_args() im globalen Skriptbereich erzeugt eine E_WARNING-Meldung und gibt -1 zurück.
Verwendung innerhalb von eval(): Innerhalb von eval() verhält sich die Funktion wie innerhalb der umgebenden Funktion, sofern sie innerhalb einer solchen aufgerufen wird.