PHP-Funktionen mit variabler Parameterzahl

Soll eine Funktion unter PHP statt einer fixen Parameterzahl beliebig viele Übergabeparameter verarbeiten, so findet der Programmierer auch hier Unterstützung. Dies gilt zumindest für PHP ab Version 4 – PHP 3 unterstützt dagegen keine variablen Parameterlisten. Abgesehen von der Art, wie auf übergebene Parameter zugegriffen wird, gestaltet sich die Arbeit mit Funktionen mit variabler Parameterzahl nicht anders bei „normalen” Funktionen. Zum Zweck des Parameterzugriffs gibt es spezielle vordefinierte Funktionen, die es etwa ermöglichen, die Anzahl der einer PHP-Funktion übergebenen Parameter zu ermitteln. Diese Aufgabe wird durch func_num_args erfüllt.

Darüber hinaus können einzelne Parameter – mit func_get_arg über den Parameterindex – oder auch der gesamte Parametersatz (func_get_args liefert alle Parameter in Form eines Arrays) abgefragt werden. Das durch diese Funktion gelieferte Array enthält zugleich die Information, wieviele Parameter beim Funktionsaufruf im Parametersatz enthalten sind. Mit den üblichen Mitteln, die PHP zur Verarbeitung von Arrays mitbringt lässt sich mit der Größe des gelieferten Arrays zugleich auch die Anzahl der übergebenen Parameterwerte ermitteln. Die Möglichkeit des Zugriffs auf die einer Funktion übergebenen Argumente per func_num_args, func_get_arg und func_get_args besteht im Übrigen auch bei Funktionen, die mit einer fixen Parameterliste definiert werden.

Bitte beachten Sie, dass func_num_args, func_get_arg und auch func_get_args sinnvollerweise ausschliesslich innerhalb von Funktionen genutzt werden dürfen. Werden sie ausserhalb von selbstdefinierten Funktionen aufgerufen, so führt dies zu einer PHP-Warnung, die auf den Fehler hinweist.

<?php
    // Funktion zur Ausgabe von allem, was ihr beim Aufruf übergeben wird.
    function gib_aus_was_kommt () {
        // Wieviele Parameter wurden an die Funktion übergeben?
        $anzahl_argumente = func_num_args ();
        // Iteration über alle Parameter
        for ($i = 0; $i < $anzahl_argumente; $i++) {
            // Spezielle Datentypen erfordern ggf. eine Sonderbehandlung.
            // Deshalb wird vor der Ausgabe der Datentyp geprüft.
            switch (getType (func_get_arg ($i))) {
                // Sonderfall: Bei einem übergebenen Array sollen
                // die darin gespeicherten Werte ausgegeben werden.
                // (wird hier nur 1-Dimensional verarbeitet)
                case 'array':    foreach (func_get_arg ($i) as $vals)
                            echo $vals . ' ';
                        break;
                // Alle anderen Typen sollen direkt ausgegebene werden
                default: echo func_get_arg ($i) . ' ';
            }
        }
    }

    // Variablen vorbelegen
    $hunde = 5;
    $junge = 3;
    // Aufruf mit gemischten Parametern
    gib_aus_was_kommt ('Wenn', $hunde, array ('Hunde', $junge, 'Junge', 'bekommen'),
               'dann sind das', $hunde * $junge, 'Tiere!<br>');

    // Zugriff auf Parameter mittels Parameterarray
    function varargs () {
        // Alle übergebenen Parameterwert in Form eines Arrays
        $argv = func_get_args ();
        // Mit Array-Mitteln die Anzahl der Parameter ermitteln
        $argc = sizeof ($argv);
        // Gesammelte Informationen ausgeben
        echo 'Funktion wurde mit ' . $argc . ' Paramtern aufgerufen!<br>';
        // Parameterwerte ausgeben
        for ($i = 0; $i < $argc; $i++)
            echo 'Parameter[' . $i . '] = ' . $argv[$i] . '<br>';
    }

    // Testweise mit zwei Strings aufrufen
    varargs ('Parameter 1', 'Parameter 2');
?>

Wenn 5 Hunde 3 Junge bekommen dann sind das 15 Tiere!
Funktion wurde mit 2 Paramtern aufgerufen!
Parameter[0] = Parameter 1
Parameter[1] = Parameter 2

Letzte Posts aus unserem Forum

Webentwickler Konferenz in Hamburg

Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr

von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortet

bedingte Weiterleitung in Kontaktformularen

Hallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr

von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortet

Gesucht: Auslesen einer externen Website

Mein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr

von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 Antwort
Letzter Beitrag: Donnerstag, 3. Februar 2011 14:43 von alm

Hallo, am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr

Zeilenumbruch in der Bildergalerie-Beschriftung

Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr

von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 Antwort
Letzter Beitrag: Freitag, 28. Januar 2011 10:16 von alm

Hallo, ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr

Bildergalerie mehrfach einbinden

Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr

von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 Antworten
Letzter Beitrag: Mittwoch, 29. Dezember 2010 20:50 von Saga

Hallo Alex, die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr

¬ Tutorials



¬ Insolvenzrecht