Funktionen in PHP
Funktionen sind flapsig gesagt, kleine Programme im großen Ablauf.
Wenn wie bisher alle Abläufe nacheinander kommen, wird es bei schon mittelgroßen Programmen bereits herzhaft unübersichtlich und es werden unter Umständen immer wieder benötigte Programmteile doppelt und dreifach erstellt. Dies kann über Funktionen umgangen werden.
Als Beispiel kommt hier eine kleine Berechnung, die in eine Funktion aufgegliedert wird.
Aufbau einer Funktion
Die Struktur ist immer dieselbe
Alles GROß Geschriebene sind beliebige Namen und Werte:
function NAME-DER-FUNKTION ( ÜBERGABEWERTE ) { AUSZUFÜHRENDER CODE; return ( ZURÜCKGEBENER WERT ); }
Aufgerufen wird eine Funktion dann mit:
$ZURUECKGEGEBENER_WERT = NAME-DER-FUNKTION ( ÜBERGABEWERTE );
Vorerst eine ganz einfache Funktion ohne Übergabewerte und ohne Rückwerte.
<?php function ausgabe_uhrzeit() { echo "<p>Es ist gerade: ". date("H:i:s"). "</p>"; } ausgabe_uhrzeit(); ?>
Und dann das Ergebnis des Programmes:
Es ist gerade: 10:34:55
Funktionen können beliebig oft aufgerufen werden - im Beispiel sehen Sie, wie schnell auch die Ausführung von PHP-Programmen ist. Die Ausgabe der Uhrzeit erfolgt am Beginn und am Ende (OK, viel mehr macht das Programm nicht:)
<?php function ausgabe_uhrzeit() { echo date("H:i:s"); } echo "<p>Programmm wurde gestartet um: "; ausgabe_uhrzeit(); echo "<p>Programmm wurde beendet um: "; ausgabe_uhrzeit(); ?>
Programmm wurde gestartet um: 10:52:22
Programmm wurde beendet um: 10:52:22
Funktionen mit Übergabewert
Beim Funktions-Aufruf können Inhalte übergeben werden, im Beispiel dividieren( 18, 2 );
Die Funktion selber nimmt in der übergebenen Reihenfolge die Zahlen entgegen und weist diese den Variablen $zahl und $quotient zu.
<?php function dividieren( $zahl, $quotient ) { echo bcdiv ($zahl, $quotient); } echo "<p>Berechnung von 18 / 2 = "; dividieren( 18, 2 ); ?>
Als berechnete Ergebnis sollte nun angezeigt werden - im Beispiel hier:
Berechnung von 18 / 2 = 9
Nun werden wir das Programm erweitern, dass es variabler wird - hier nun schon vorneweg Variablen. Für die erste Zahl $dividend (die Zahl, die geteilt wird) und $divisor (die Zahl, durch die geteilt wird)
<?php $dividend = 33; $divisor = 5; function dividieren( $zahl, $quotient ) { echo bcdiv($zahl, $quotient); } echo "<p>Berechnung von $dividend / $divisor = "; dividieren( $dividend, $divisor ); ?>
Das Ergebnis ist für Leute, die es nicht so genau nehmen – für alle andere bitte in www.php.net nachschlagen, wie die Genauigkeit eingestellt werden kann.
Berechnung von 33 / 5 = 6
Gültigkeit von Variablen
Das besondere an Funktionen ist die Gültigkeit von Variablen. Im Beispiel werden alle Variablen vor der Funktion, innerhalb der Funktion und nach der Funktion aufgerufen.
<?php $dividend = 33; $divisor = 5; // aus didaktischen Gründen echo "<p>Werte außerhalb und VOR der Funktion"; echo '<br> $dividend :' . $dividend; echo '<br> $divisor :' . $divisor; echo '<br> $zahl :' . $zahl; echo '<br> $quotient :' . $quotient; echo '<br>'; function dividieren( $zahl, $quotient ) { echo bcdiv($zahl, $quotient, 2); // aus didaktischen Gründen echo "<p>Werte INNERHALB der Funktion"; echo '<br> $dividend :' . $dividend; echo '<br> $divisor :' . $divisor; echo '<br> $zahl :' . $zahl; echo '<br> $quotient :' . $quotient; echo '<br>'; } echo "<p>Berechnung von $dividend / $divisor = "; dividieren( $dividend, $divisor ); // aus didaktischen Gründen echo "<p>Werte außerhalb und NACH der Funktion"; echo '<br> $dividend :' . $dividend; echo '<br> $divisor :' . $divisor; echo '<br> $zahl :' . $zahl; echo '<br> $quotient :' . $quotient; echo '<br>'; ?>
In der Ausgabe das Browsers sehen wir nun, dass die Variablen andere Werte innerhalb der Funktion haben, wie diese vor und nach der Funktion.
Werte außerhalb und VOR der Funktion
$dividend :33
$divisor :5
$zahl :
$quotient :
Berechnung von 33 / 5 = 6.60
Werte INNERHALB der Funktion
$dividend :
$divisor :
$zahl :33
$quotient :5
Werte außerhalb und NACH der Funktion
$dividend :33
$divisor :5
$zahl :
$quotient :
Das bedeutet, dass Variablen, die außerhalb der Funktion Inhalte habe, diese nicht mehr in der Funktion verfügbar haben. Selbst wenn Sie dieselben Variablennamen verwenden. Aus diesem Grund müssen Ergebnisse, die dann z.B. nach Berechnung innerhalb einer Funktion, wieder zurückgegeben werden - dieses geschieht über return ( $wert );
<?php $dividend = 33; $divisor = 5; function dividieren( $zahl, $quotient ) { $ergebnis = bcdiv($zahl, $quotient, 2); return ( $ergebnis ); } $wert = dividieren( $dividend, $divisor ); echo "Berechnung von $dividend / $divisor = $wert "; ?>
Da die Gültigkeit der Variablen $ergebnis nur innerhalb der Funktion gilt, wird der Wert über den Funktionsaufruf der Variable $ergebnis (kann auch beliebig anders genannt werden) zugewiesen $wert = dividieren( $dividend, $divisor );
Berechnung von 33 / 5 = 6.60
Vorgabewerte für Funktionen bestimmen
Funktionen mit Vorgabewerten zu belegen, kann so geschehen:
<?php function dividieren( $zahl=1, $quotient=1 ) { // ... ?>
Wird keine Zahl beim Funktionsaufruf übergeben, wird einfach der Vorgabewert genutzt, im obigen Beispiel dann "1".
Aufgabe: Sicherheitskontrolle in Funktion auf 0
Da durch 0 nicht geteilt werden darf, soll innerhalb der Funktion eine Sicherheitsabfrage stattfinden und gegebenenfalls ein Hinweis kommen.
Teilen durch 0 nicht möglich
Berechnung von 33 / 0 =