Start · Sprachen · PHP · Referenz · func_num_args

func_num_args

Funktion

Gibt die Anzahl der tatsächlich an die aktuelle Funktion übergebenen Argumente zurück.

seit PHP 4.0.0 Kategorie: oop

Signatur

func_num_args(): int

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 int zurück.
  • Gibt -1 zurü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

Typ
int
Beschreibung
Gibt die Anzahl der an die aktuelle Funktion übergebenen Argumente zurück. Wird die Funktion außerhalb eines Funktionskontexts aufgerufen, wird -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');
Anzahl der übergebenen Argumente: 3 Argument 0: Alice Argument 1: Bob Argument 2: 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);
15

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);
15

// 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.