Dies ist eine alte Version des Dokuments!


Eigene Funktionen

Eine Funktion ist ein separater Programmteil, der eine besondere Aufgabe löst. Sie wird verwendet, um etwa eine Formel zu berechnen. Ihr werden dazu die notwendigen Eingabewerte übergeben; als Ausgabewert erhält man das Ergebnis. Normalerweise wird eine Funktion in Verbindung mit der erwünschten Rückgabe eines Wertes benutzt. In PHP ist eine Funktion mehr. Sie stellt ein Modul dar, welches beliebig oft aufrufbar ist.
Obwohl dies einem viele Möglichkeiten gibt, sei darauf hingewiesen, dass in PHP sehr viele Funktionen, welche auch auf spezielle Bedürfnisse eingehen, schon vorhanden sind. Schau dazu bitte in das offizielle PHP Handbuch.

Syntax einer Funktion

Durch function, den Funktionsnamen und dann die Parameter wird eine Funktion definiert.

<?php
  function FunktionsName($Parameter1, $Parameter2, ...)
  {
    //Anweisungen
    return $variable; //Rückgabewert
  }
?>

Sind keine Parameter vorhanden, bleibt der Inhalt der Klammern leer. Mit return kannst Du ein Ergebnis zurückzugeben.

Aufrufen einer Funktion

Du rufst eine Funktion auf, indem Du sie mit ihrem Namen, wie in der Definition, nennst und in Klammern die erforderlichen Parameter übergibst. Hat die Funktion einen Rückgabewert, weist Du diesen einer Variable zu oder übergibst ihn direkt einer anderen Funktion.

An welcher Stelle sich Funktionen im Quelltext befinden, spielt seit PHP 4 keine Rolle mehr. Wenn PHP auf die Definition einer Funktion trifft, wird der Code übersprungen und erst dann ausgeführt, wenn die Funktion aufgerufen wurde.


Variablen die in einer Funktion definiert werden, verlassen diese nicht. Das bedeutet, dass sobald die Funktion zu Ende ausgeführt wurde, die Variablen welche in dieser definiert wurden, gelöscht werden und beim erneuten Eintritt in die Funktion neu definiert werden. Dies kann man aber durch die Definition der Variablen als static verhindern (siehe dazu den Abschnitt Statische Variablen) oder indem man die Variable als „By Reference“ der Funktion übergibt, doch dazu später mehr.


<?php
  $b = 14;
  $c = test(10, $b);//Funktionsaufruf
  echo $c;
  function test($a, $b) //Funktionsdeklaration
  {
    if($b < $a) : return $a - $b;
    elseif($b > $a) : return $a + $b;
    else : $c = "\$a und \$b sind gleich groß";
  }
?>

Ausgabe:

24

Diese Funktion testet, ob der Wert über oder unter $b liegt und rechnet dann entsprechend die Zahl zu $a hinzu oder von ihr ab oder gibt bei Gleichheit den entsprechenden Text aus.

By Value

Häufig werden Funktionen verwendet, um den Wert von Variablen zu verändern. Ist es erwünscht, dass eine Variable nur innerhalb einer Funktion verändert wird, verwendest Du die Schreibweise($a, $b…$z). Die Funktion hat damit keinen Einfluss auf den Originalwert der Variablen; die Variablen behalten ihren Wert, auch wenn man die Variablen in der Funktion gleich benennt. Diese Art des Aufrufs nennt man dadurch Call by Value(Aufruf mit Wertübergabe).

<?php
  $a = 10;
  berechne_a_plus_a($a);
  echo $a;
  function berechne_a_plus_a($a)
  {
    $a += $a;
  }
?>

Ausgabe:

10

Obwohl der Übergabewert innerhalb der Funktion verändert wird, hat das keinen Einfluss auf den Originalwert von $a. Auch nicht, wenn die Parameter in der Funktion gleich benannt werden wie die Variablen außerhalb.

By Reference

Das Gegenstück zu Call by Value ist Call by Reference(Übergabe als Referenz), was bedeutet, PHP übergibt nicht einfach den Wert des Parameters, sondern verweist direkt auf die Speicherzelle (Genauso wie in C's Referenzen). Damit hat die Funktion Zugriff auf die Variable(n). Du definierst einen Parameter By Reference, indem Du das & (Und) Zeichen dem Parameter voranstellst.
Du kannst By Reference dazu nutzen, dass eine Funktion mehr als nur einen Wert „zurück gibt“, in diesem Fall über die Parameterliste.

<?php
  $a = 10;
  berechne_a_plus_a($a);
  echo $a;
  function berechne_a_plus_a(&$x)
  {
    $x += $x;
  }
?>

Ausgabe:

20

Die Veränderung des Parameterwertes innerhalb der Funktion wirkt sich auf den Ausgangswert aus, auch wenn die Variable anders benannt wurde.
Werden wie im folgendem Beispiel mehrere Funktionen verschachtelt aufgerufen, werden diese von innen nach außen abgearbeitet.

  echo floor(sqrt("12"));

Ausgabe:

3

Diese beiden Funktionen sind mathematische Funktionen. sqrt zieht die Quadratwurzel aus einer Zahl. floor rundet eine Fließkommazahl auf eine Ganzzahl. Beide Funktionen wurden miteinander durch den Aufruf verknüpft.
Dies geht so, dass zuerst die Funktion sqrt die Wurzel von 12 zieht. Danach wird das Ergebnis (3.464…) der aufrufenden Funktion floor übergeben, welche die Nachkommastellen rundet. Dieser Vorgang erspart einem das Kopieren des Zwischenresultates in eine Zwischenvariable.

Rekursiv

Eine Funktion darf sich auch selbst aufrufen. Dieser Aufruf heißt rekursiver Aufruf.
Rekursives Programmieren eignet sich insbesondere zum Verarbeiten von Baumstrukturen, ähnlich einer Ordnerstruktur, bei der Implementierung von Such- und Sortieralgorithmen oder numerische Berechnungen. Zu den Vorteilen und Nachteilen dieses Aufrufs liest man am besten das Kapitel Rekursion.

Nachdem wir nun Berechnungen auslagern können, geht es im nächsten Kapitel darum, gleichartige Werte in Arrays abzulegen. Dazu erfahren wir auch etwas über globale Arrays.