22.04.19 4053 Views 4

credit: ©monsitj(stock.adobe.com)

PHP Tutorial #17

Variable Parameterlisten und optionale Parameter

Um Funktionen in PHP noch flexibler einzusetzen, stehen zwei Techniken im Umgang mit Parametern zur Verfügung: Der Einsatz variabler Parameterlisten und optionale Parameter.

Falconbyte unterstüzen

Betrieb und Pflege von Falconbyte brauchen viel Zeit und Geld. Um dir auch weiterhin hochwertigen Content anbieten zu können, kannst du uns sehr gerne mit einem kleinen "Trinkgeld" unterstützen.

Thema in Kurzform

  • Variable Parameterliste bedeutet, dass neben den explizit deklarierten Parametern beliebig viele weitere beim Funktionsaufruf ergänzt werden können.
  • Optionale Parameter sind Parameter mit vordefinieren Werten:
    function chooseNumber($a, $b = 2){ // }
    

    Inhaltsverzeichnis

  1. Variable Parameterlisten
  2. Optionale Parameter
  3. Übungen

Variable Parameterlisten

Wir erinnern uns: Beim Aufruf einer Funktion sind die Parameter der Funktionsdefinition zu beachten. Zum Beispiel:

//Aufruf der Funktion:
echo addiere(4, 2.7); // 6.7

//Funktionsdefinition:
function addiere($a, $b){
    return $a+$b;
}

Die Funktion addiere() wurde mit zwei Parametern definiert und Sie erhält beim Funktionsaufruf eben genau zwei Argumente. Alles korrekt also!

Zu wenige Argumente

Wenn wir aber zu wenige Argumente beim Funktionsaufruf einsetzen, schrotten wir den Code:

echo addiere(4); //Fehler!

Der Fehlercode sagt uns, dass wir zu wenige Argumente beim Funktionsaufruf übergeben haben:

Fatal error: ... Too few arguments to function addiere(), 1 passed ... and exactly 2 expected ....

Die Argumentenliste

Was aber geschieht, wenn wir beim Funktionsaufruf mehr Argumente übergeben, als in der Funktionsdefinition festgeschrieben? Also:

echo addiere(4, 2.7, 9, 6.8);

Wir geben die beiden ersten beiden Pflicht-Argumente an und zwei zusätzliche. Ein wenig überraschend, aber dieser Code erzeugt keinen Fehler und ist völlig legal.

Es ist in PHP also möglich, über die Mindestzahl hinaus eine variable Anzahl von Argumenten zu übergeben.

Wir können auf die Werte der "überschüssigen" Argumente aber nicht mittels Parametervariablen zugreifen, da diese ja eben nicht definiert wurden.

Doch es gibt einen Weg: Hierzu müssen wir uns bewusst machen, dass alle Argumente in einer Argumentenliste gespeichert werden - und diese Liste funktioniert wie ein numerisch-indiziertes Array. Für unser Beispiel:

PHP Argumentenliste Arry

Zugriff auf die Argumentenliste

Für das Handling der Argumentenliste gibt es drei spezielle Funktionen:

  • func_num_args(): Diese Funktion liefert die Anzahl der übergebenen Argumente
  • func_get_arg(): Liefert ein bestimmtes Argument aus der Liste
  • func_get_args(): Liefert die Argumentenliste als Array

Ein paar Code-Beispiele machen die Sache klar. Erproben wir zunächst die Funktion func_num_args(), um die Anzahl der übergebenen Argumente zu erhalten:

echo addiere(4, 2.7, 9, 6.9); // 4

function addiere($a, $b){
    return func_num_args(); //Anzahl der Argumente zurückliefern
}

Alles klar. Testen wir nun func_get_arg(), indem wir jedes einzelne Element der Liste einmal ansteuern:

echo addiere(4, 2.7, 9, 6.9); // 22.6

function addiere(){

    $summe = 0;

    for($i = 0; $i < func_num_args(); $i++){
        $summe += func_get_arg($i);
    }

    return $summe;
}

Wir verwenden hierzu eine Schleife und summieren die einzelnen Elemente miteinander. Die Schleifendurchläufe werden durch die Anzahl der Argumente bestimmt (func_num_args()). Jedes einzelne Element wird über den Index-Wert mithilfe der Schleifenvariable $i angesprochen (in runden Klammern). Am Ende liefert die Funktion den Wert von $summe zurück, also 22.6.

Die Funktion func_get_args() ist dann nicht mehr schwierig: Sie liefert uns die Argumentenliste als Array zurück, mit dem wir ganz klassisch weiter arbeiten können:

$mein_array =  addiere(4, 2.7, 9, 6.9);
echo $mein_array[0]; // 4
echo $mein_array[1]; // 2.7
echo $mein_array[2]; // 9
echo $mein_array[3]; // 6.9

function addiere(){
    return func_get_args();
}

Optionale Parameter

Optionale Parameter sind Parameter mit vordefinieren Werten. Werden beim Aufruf der Funktion den optionalen Parametern keine Werte gegeben, werden sie stattdessen mit vorher festgelegten Standardwerten initialisiert.

function chooseNumber($a, $b = 0, $c = 0){
    return $a . " " . $b . " " . $c;
}

In der Funktion chooseNumber sind $b und $c optionale Parameter. Als optional wird ein Parameter markiert, wenn er noch im Funktionskopf mit einem bestimmten Standardwert initialisiert wird ($b = 1 und $c = 1).

Rufen wir die Funktion nun mit unterschiedlichen Argumenten auf:

echo chooseNumber(1) . "<br>";
echo chooseNumber(1, 1) . "<br>";
echo chooseNumber(1, 1, 1);

Wir erhalten damit Folgendes angezeigt:

1 0 0
1 1 0
1 1 1

Der Funktionsaufruf chooseNumber(1) hat ein Argument für den Pflichtparameter. Die beiden optionalen Parameter sind nicht belegt und erhalten dadurch die Standardwerte 0 und 0.

chooseNumber(1, 1) hat zwei Argumente. Dadurch erhält nur der letzte optionale Parameter den Standardwert 0.

Bei chooseNumber(1, 1, 1) schließlich werden alle in der Funktionsdefinition beschriebenen Parameter abgedeckt. Es wird kein festgelegter Standardwert verwendet.

Übungen

einfach

Ist der folgende Code gültig?

meine_function("PHP");

function meine_function(string $str, $i){
    //
}
Lösung ein-/ausblenden

mittel

Was wird am Bildschirm angezeigt?

theOA("A", "B");

function theOA($a, $b, $c = "C", $d = "D"){

    $n = func_num_args();

    if($n < 3){
        return "tiger";
    }
    else if($n < 5){
        return "penguin";
    }
    else{
        return "turtle";
    }
}

A. tiger
B. penguin
C. turtle
D. Fatal error: Nicht genügend Argumente
E. Es wird nichts am Bildschirm angezeigt

Lösung ein-/ausblenden

schwer

Schreiben Sie eine Funktion, die beliebige Namen in Form von Strings als Argumente aufnehmen kann. Allerdings wissen Sie zur Zeit der Implementierung der Funktion noch nicht, wieviele Argumente es zur Zeit des Funktionsaufrufs geben wird. Was Sie wissen: Es müssen mindestens zwei Namen übergeben werden.

Innerhalb der Funktion speichern Sie die Parameterliste in einem Array ab. Jedem zweiten Array-Element fügen Sie direkt die Zahlen "777" an.

Geben Sie am Ende der Funktion alle Namen am Bildschirm aus.

Lösung ein-/ausblenden

Java lernen

text text

PHP Lernen

zur PHP

JavaScript lernen

move nove move

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen