Home » PHP » Einführung » Funktionen

Welche Funktionen gibt es und wie kann ich eigene schreiben?

Im Artikel zum Aufbau von Scripten habe ich bereits erklärt, wie eine bereits definierte Funktion aufgerufen werden kann. Dieser Artikel beschäftigt sich mit der Definition einer neuen Funktion. Ich werde außerdem die Schlüsselworte global und return erläutern.

Syntaktischer Aufbau von Funktionen

Der Kopf einer Funktion umfasst das Schlüsselwort function, den Namen der neuen Funktion, gefolgt von Variablennamen für die möglichen Parameter. Seit PHP4 ist es möglich, die Parameterliste in bestimmten Fällen weg zu lassen und mit einer unbestimmten Anzahl von Parametern zu arbeiten. Wie befassen uns hier zunächst mit der einfachen Variante. Der Rumpf einer Funktion wird von einer geöffneten und geschlossenen geschweiften Klammer gebildet { ... }.
 
1 function name($param1, $param2, $paramN)
2 {
3   /* Dein Code */
4 }
 
Die Anzahl der Paramter ist beliebig. Parameter können von rechts nach links als optional deklariert werden. Dazu muss der Paramtername gefolgt von einem Gleichheitszeichen und einem anschließenden Standardwert angegeben werden. Als Standardwert sind nur konstante Werte zugelassen, es ist nicht möglich, den Wert einer Variable zu verwenden. Hier ein Beispiel:
 
1 function myAddFunction($wert1, $wert2, $wert3 = 0)
2 {
3   $ergebnis = $wert1 + $wert2 + $wert3;
4 
5   return $ergebnis;
6 }
 
In diesem Beispiel, können zwei oder drei Werte an die Funtion myAddFunction() übergeben werden. Sollten nur zwei Werte übergeben werden, wird der dritte Parameter automatisch auf 0 gesetzt. Wie man sieht, wird auch bei Funktionen nicht der erwartete Datentyp angegeben. Entweder muss also beim Schreiben der Funktion darauf geachtet werden, dass der entsprechende Datentyp übergeben wurde oder es muss beim verwenden der Funktion stehts darauf geachtet werden, dass der korrekte Datentyp übergeben wird. Da bei einer Addition eine Zeichenkette, welche keine Zahl ist, automatisch zu einer Zahl mit dem Wert 0 konvertiert wird, ist eine überprüfung der übergebenen Parameter in diesem Fall nicht notwendig. Die Datentyp Überprüfung kann mittels der Funktionen is_int(), is_string(), is_array(), usw. vorgenommen werden.

Das Schlüsselwort return

In obigem Beispiel sieht man das Schlüsselwort return. Dieses Schlüsselwort sorgt dafür, dass eventuell nachfolgender Code einer Funktion nicht weiter ausgegeben wird. Die Funktionsausführung wird unterbrochen. Dieses Schlüsselwort gibt, ähnlich wie echo, einen Wert zurück. Dieser wird in diesem Fall jedoch nicht sofort ausgegeben, sondern steht dort zur Verfügung, von wo die Funktion aufgerufen wurde. Die obige Funktion könnte man zum Beispiel so verwenden:
 
1 echo '3 und 5 sind ' . myAddFunction(3, 5);
 

Das Schlüsselwort global

Die Variablen, welche in einer Funktion deklariert werden, stehen außerhalb der Funktion nicht ohne weiteres zur Verfügung. Ebenso stehen Variablen, die außerhalb einer Funktion deklariert wurden innerhalb einer Funktion ebenfalls nicht zur Verfügung. Das heißt: Funktionen haben einen eigenen Namensraum für Variablen. Folgendes Beispiel verdeutlicht dies:
  
 1 $counter = 2;
 2 
 3 function updateCounter($value)
 4 {
 5   $counter = $value;
 6 }
 7 
 8 echo $counter . ' - ';
 9 updateCounter(3);
10 echo $counter . ' - ';
11 updateCounter(4);
12 echo $counter;
  
Die Ausgabe dieses Scripts wäre "2 - 2 - 2". Der Wert der Variable $counter wird nur innerhalb der Funkion verändert. Wenn du Funktion folgendermaßen geändert würde, wäre die Ausgabe "2 - 3 - 4":
 
1 function updateCounter($value)
2 {
3   global $counter;
4   $counter = $value;
5 }
 
Funktionen machen Sinn, wenn ein und der selbe Codeabschnitt mehrfach gebraucht wird.

Prüfen, ob eine Funktion existiert

Vorallem, wenn man Systeme entwickelt, die eventuell auch auf älteren PHP-Versionen funktionieren müssen, macht es Sinn, wenn man prüfen könnte, ob eine Funktion in dieser PHP-Version schon existierte. Seit welcher PHP-Version eine Funktion existiert ist in der PHP-Dokumentation deutlich gekennzeichnet. Ein Beispiel wäre auch eine Funktion, dessen Name sich geändert hat. Dazu zählt zum Beispiel die Funktion key_exists() bzw. nun array_key_exists(). Wenn du diese Funktion nutzen möchtest, macht es Sinn zu prüfen, ob die Funktion existiert. Dies könnte man zum Beispiel so machen:
 
1 if(!function_exists('array_key_exists'))
2 {
3   function array_key_exists($key, $search)
4   {
5     return key_exists($key, $search);
6   }
7 }
 
In diesem Beispiel wird die Funkion mit dem Namen array_key_exists() deklariert, wenn sie nicht existiert. Alle Parameter werden an die Funktion key_exists() weitergegeben. Der Rückgabewert entspricht dem Rückgabewert der Funktion key_exists(), welcher Identisch mit der aktuellen Funktion array_key_exists(). An diesem Beispiel sieht man auch, dass bedingte Funktionsdeklaration möglich ist. Die Abfrage "!function_exists('array_key_exists')" könnte in diesem Fall auch durch "version_compare(phpversion(), '4.0.6') < 0" ersetzt werden. Welche der beiden Möglichkeiten eingesetzt werden muss, ist von Fall zu Fall unterschiedlich.