PHP - Funktionen Zurück zur Übersicht
Über den Autor
Hallo und willkommen bei meinem Tutorial zum Thema Funktionen. Auch wenn dieses Tutorial nun spezieller für PHP geschrieben ist, so gilt das meiste auch für einige andere Programmiersprachen wie Java, C, C++, usw.
Inhalt
1. Was sind Funktionen und wofür sind sie gut
2. Aufbau einer Funktion
3. Sichtbarkeit von Variablen
4. Unterschiedliche Parameterübergabe - Call by Value und Call by Reference
5. Tipps
1. Was sind Funktionen und wofür sind sie gut
Hat man in einem Programm einen Codeblock, der mehrfach ausgeführt werden soll, kann man diesen in einer Funktion auslagern. Statt den Codeblock wieder und wieder aufzurufen, ruft man nun nur noch die Funktion auf.
Um den Verlauf von Funktionen zu beeinflussen, nutzt man Parameter, die man der Funktion übergibt.
2. Aufbau einer Funktion
Eine Funktion wird immer vom Schlüsselwort function gefolgt von ihrem Namen eingeleitet. Dahinter werden in Klammern die Parameter aufgelistet. Zum Schluss folgt der Funktionscode, der durch geschweifte Klammern eingeschlossen wird:
PHP-Code:
function meineFunktion($parameter1, $parameter2) { $ergebnis = $parameter1 + $parameter2; return $ergebnis; }
In diesem Fall werden der Funktion meineFunktion zwei Parameter ($parameter1 und $parameter2) übergeben. In der Funktion gibt es eine neue Variable $ergebnis. Diese speichert das Ergebnis der Addition von $parameter1 und $parameter2. Zum Schluss wird $ergebnis mit dem Schlüsselwort return zurückgegeben.
Aufgerufen werden kann die Funktion nun so:
PHP-Code:
meineFunktion(1, 3);
Die Funktion gibt nun 4 zurück. Diese wird aber nirgendwo gespeichert oder ausgegeben, daher speichern wir sie nun in $ergebnis:
PHP-Code:
$ergebnis = meineFunktion(1, 3; echo($ergebnis;
Statt das Ergebnis nun in einer Variablen zu speichern kann man es natürlich auch direkt ausgeben:
PHP-Code:
echo(meineFunktion(1, 3);
Man kann einem Parameter auch einen Standardwert übergeben, der benutzt werden soll, falls kein Parameter übergeben wurde:
PHP-Code:
function meineFunktion($param1 = "Das ist ein Test") { echo($param1; } meineFunktion(); // gibt 'Das ist ein Test' aus meineFunktion("Test abgeschlossen"; // gibt 'Test abgeschlossen' aus
Die selbe Funktion, aber einmal mit und einmal ohne Parameterübergabe. error_reporting(E_ALL) gibt keinen Fehler aus, da ja ein Standardwert deklariert ist.
3. Sichtbarkeit von Variablen
In Funktionen gilt, dass Variablen, die außerhalb der Funktion erstellt wurden, in der Funktion nicht vorhanden / nicht sichtbar sind und umgekehrt. Es sei, man deklariert sie in der Funktion mit global als Referenz, dazu später mehr.
Ein Beispiel:
PHP-Code:
$var1 = 1; function meineFunktion() { $var1 = 2; } meineFunktion(); echo($var1; // gibt 1 aus
$var1 vor der Funktion ist eine andere Variable als $var1 in der Funktion, sie haben unterschiedliche Speicherorte.
Will man nun $var1, die außerhalb der Funktion erstellt wurde, in der Funktion ändern, muss man diese mit global zu einer Referenz machen:
PHP-Code:
$var1 = 1; function meineFunktion() { global $var1; // $var1 in der Funktion ist nun eine Referenz / ein Zeiger // auf $var1 außerhalb der Funktion und kann // verändert werden $var1 = 2; } meineFunktion(); echo($var1; // gibt 2 aus
Will man $var1 einen neuen Wert in der Funktion übergeben, nachdem man die Variable referenziert hat, muss man dies übrigens in einer neuen Zeile tun, da PHP sonst einen Fehler ausgibt.
Nun der andere Weg: In Funktionen erstellte Variablen können nicht außerhalb der Funktion aufgerufen werden. Es gilt das selbe wie oben: es sei sie werden zu Referenzen gemacht:
PHP-Code:
function meineFunktion() { $var1 = 1; } meineFunktion(); echo($var1; // Gibt eine Warnmeldung aus, dass $var1 nicht definiert ist // error_reporting(E_ALL); sollte aktiviert sein, da sonst u.U. // keine Warnung erfolgt function meineFunktion2() { global $var1; $var1 = 1; } meineFunktion2(); echo($var1; // gibt 1 aus
4. Unterschiedliche Parameterübergabe - Call by Value und Call by Reference
In Punkt 2 haben wir gesehen, dass Parameter wie folgt deklariert werden können:
PHP-Code:
function meineFunktion($param1, $param2) { // Funktionscode }
Diese Übergabe nennt man Call by value, man übergibt den Wert der Variable, aber nicht die Variable selbst. Die Variable bleibt, wie bei Punkt 3 gezeigt, außerhalb der Funktion unverändert, solange man keine Referenz daraus macht.
Will man nun eine Variable als Referenz übergeben, kann man dies auch ohne global tun, indem man vor den Parameter ein & schreibt:
PHP-Code:
$var1 = 1; $var2 = 3; echo($var1 . " * " . $var2 . " = " . ($var1 * $var2 . "<br />n"; // gibt '1 * 3 = 3' aus function meineFunktion(&$param1, &$param2) { $param1 = 5; $param2 = 9; } meineFunktion($var1, $var2); echo($var1 . " * " . $var2 . " = " . ($var1 * $var2 . "<br />n"; // gibt '5 * 9 = 45' aus
Hier wurden nicht die Werte der Variablen übergeben sonderen ein Zeiger / eine Referenz auf deren Speicherorte. Das nennt man Call by reference
5. Tipps
a) Kennzeichnet die Parameter, z.B. mit $par_variablenname oder $variablenname_par, das macht den Unterschied zwischen Parameter und Variable deutlicher
b) Gebt den Funktionen aussagekräftige Namen, damit ihr schnell wisst, was sie tun, wenn ihr sie nach Monaten wieder verwendet, z.B.: quadriere(), addiere(), gibAus(), ...
c) Speichert die Funktionen in einer externen Datei und includet sie später in den Programmcode, so könnt ihr sie schneller finden, bearbeiten und in anderen (Web-)Applikationen einbauen
Ich hoffe, euch hat das Tutorial gefallen und es hilft euch, beim Erstellen eigener (Web-)Applikationen.
PS: Es handelt sich hierbei um ein von mir neugeschriebenes Tutorial. Ich hoffe, dass da keine Fehler auftreten, falls doch, bin ich bereit diese auszumerzen.