Php Function
Sie befinden sich: Home > Php >
Php Function
PHP-Entwickler gibt es wie Sand am Meer – doch
die wenigsten benutzen bei der Erstellung
ihrer Web-Anwendungen Funktionen. Dabei
sind diese perfekt dazu geeignet, Wiederholungen
im Quelltext zu vermeiden, und dabei
natürlich auch Fehlerquellen zu
umgehen. Nicht zu vergessen natürlich
die Zeitersparnis, die bei der Verwendung
von anwendungsspezifischen Funktionen
auftritt. Denn im Grunde ist PHP ja eine
objektorientierte Skriptsprache, die
an die Programmiersprache C angelehnt
ist. Man muss sie nur entsprechend benutzen.
In diesem Artikel behandeln wir also
die Verwendung von Funktionen. Einer
der großen Vorteile an PHP ist
die riesige Bibliothek an schon vorhandenen
Funktionen, die inzwischen sogar schon
kritisiert wird, weil sie so schnell
und unkontrolliert gewachsen ist. Nichts
desto Trotz haben diese Funktionen einen
entscheidenden Vorteil: Sie tun meist
das, was sie sollen, ohne einen Aufwand
zu verursachen.
Ein gutes Beispiel für die Verwendungsmöglichkeit
von PHP-Funktionen ist die so genannte Date-Function.
Das Datum wird im Webserver-Bereich und
in Datenbanken häufig als Unixtime-Timestamp
abgelegt. Bei der Unixtime werden ganz
einfach die Sekunden seit dem 1. Januar
1970, 0:00 Uhr (UTC) hochgezählt.
Das hat den Vorteil, dass man immer die
genaue Uhrzeit, unabhängig von der
Zeitzone und ähnlichen Lasten bestimmen
kann. So ein typischer Unixtime-Timestamp
(zum Beispiel 1249021953) hat den Nachteil,
dass er für Menschen sehr schlecht
lesbar ist. Ist es jetzt gewünscht,
einen solchen Timestamp für Menschen
gut leserlich in einer PHP-Anwendung
auszugeben, hat man zwei Möglichkeiten.
Entweder man programmiert selbst einen
entsprechenden Algorithmus, der die Unixtime
in Normalzeit umrechnet, oder man verwendet
einfach die schon vorhandene Date-Function.
Alles was zu tun ist, ist der Funktion
den Unixtime-Timestamp und das gewünschte
Ausgabeformat zu übergeben, das
sehr frei gestaltet werden kann.
Code-Beispiel:
<?php
echo date("d.m.Y", 1249021953);
?>
Erklärung:
echo: Ist hier nur zur Veranschaulichung,
um eine Ausgabe zu erzielen. Genau so
kann das Ergebnis der Funktion auch in
eine Variable gespeichert werden.
date: Ist der Name der aufgerufenen
Funktion. In diesem Fall eben die Datumsfunktion.
d.m.Y: Spezifiziert das Format,
in dem die Uhrzeit ausgegeben werden
soll. In diesem Fall wäre das DD.MM.JJJJ.
Genau so könnte man aber auch beliebige
andere Ausgabeformate wie eine vierstellige
Jahreszahl oder ausgeschriebenen Monatsnamen
wählen. Die Möglichkeiten sind
fast grenzenlos.
Mindestens genau so interessant wie das
Verwenden schon bestehender Funktionen
ist aber sicherlich die Erstellung eigener,
personalisierter kleiner Helferlein,
die sich perfekt in das eigene Programmschema
anpassen und genau das tun, was sich
der Entwickler wünscht. Die Rede
ist von der Definition von eigenen Funktionen,
das PHP als objektorientierte Sprache
natürlich anbietet. Hauptziel ist
dabei klar: Es soll vermieden werden,
dass ein Entwickler gleiche Elemente
im Quelltext immer wieder wiederholt
und dabei einerseits die Performance
verschlechtert, andererseits aber auch
Nährboden für Fehler ausstreut
sowie den Wartungsaufwand in die Höhe
treibt. Doch wie geht das?
Eine Definition einer Funktion wird wie üblich
mit einem Schlüsselwort eingeleitet.
<?php
function
?>
Nach dem Schlüsselwort muss ein
Name für die Funktion vergeben werden.
Diese Namensvergabe unterliegt zwar nicht
ganz so strengen Namenskonventionen wie
in anderen Programmiersprachen, sollte
aber nicht mit einer Zahl oder einem
Sonderzeichen beginnen und nicht nur
aus Großbuchstaben bestehen.
<?php
function individuelleFunktion
?>
Von der Syntax her unterscheidet sich
die selbst erstellte Funktion also nicht
von normalen, schon Out-of-the-Box-Funktionen.
Auch hier können Parameter übergeben
werden. Dafür folgen dem Funktionsaufruf
runde, sich öffnende Klammern. Anschließend übergibt
man für gewöhnlich an Stelle
der Parameter selbst Variablen, damit
die Funktion mehrfach genutzt werden
kann. Diese Parameter bzw. Variablen
werden per Kommata getrennt. Hier gibt
es jedoch eine Ausnahme: Ist bei Funktionsaufruf
noch nicht klar, welche bzw. wie viele
Parameter übergeben werden sollen,
werden die Parameter dynamisch beim Ablauf
der Funktion mit den Funktionen func_num_args,
func_get_arg und func_get_args geladen.
Nach der Parameterliste folgt eine runde
schließende Klammer.
<?php
function individuelleFunktion($parameter1, $parameter2)
?>
Jetzt sind wir bereit, die eigentliche
Programmlogik zu entwickeln. Schließlich
muss die Funktion, um ihren Sinn zu erfüllen,
jetzt mit den Variablen arbeiten und
etwas erledigen – im einfachsten
Fall einen Wert zurückliefern. Der
Quelltext innerhalb der Funktion wird
von geschweiften Klammern umgeben. Üblich
ist, diesen Quelltext ein wenig einzurücken,
so dass der Code besser lesbar wird.
Immerhin kann es auch einmal passieren,
dass mehrere Entwickler an einem Projekt
arbeiten und nicht nur eigene Code-Snippets
bearbeiten.
<?php
function individuelleFunktion($parameter1, $parameter2) {
//Ab hier beginnt der Code (Kommentar)
}
?>
Kommentare im PHP-Code lassen sich mit
zwei Schrägstrichen realisieren.
Möchte man eine ganze Passage auskommentieren,
ist das mit den Zeichenfolgen „/*“ (Anfang
Kommentar) und „*/“ (Ende
Kommentar) möglich.
In der Funktion sind die außerhalb
definierten Variablen nicht verfügbar.
Fachleute nennen den Raum, in dem eine
Variable sichtbar ist, „Variable
Scope“. Das heißt, dass
alle Werte aus der Anwendung, mit denen
die Funktion arbeiten soll, per Parameterliste übergeben
werden müssen. Einzige Ausnahme
bilden hier die globalen Variablen. Variablen
können selbst in der Funktion noch
als global gekennzeichnet werden, und
sind dann auch dort verfügbar. Mit
dieser Vorgehensweise sollte man aber
sehr sparsam umgehen und wirklich abwägen,
ob sie Sinn macht und notwendig ist.
Sie ist nämlich auch ein beliebter
Fallstrick und führt oftmals zu
Fehlern.
<?php
$anzahl = 23;
function individuelleFunktion($parameter1, $parameter2) {
echo $anzahl;
}
?>
Hier würde keine Ausgabe erfolgen,
weil die Variable $anzahl nicht
innerhalb des Variable Scope verfügbar
ist.
Im Vergleich:
<?php
$anzahl = 23;
function individuelleFunktion($parameter1, $parameter2) {
global $anzahl;
echo $anzahl;
}
?>
Diese Funktion würde den Wert „23“ ausgeben,
da die Variable $anzahl zur
globalen Variable deklariert wird.
Was man bei der Verwendung von Funktionen
und Variablen auch kennen sollte, sind
die so genannten statischen Variablen.
Diese sind nützlich, wenn eine Variable
auf jeden Fall nur einmal initialisiert
werden soll. Folgendes Beispiel verdeutlicht
eine Einsatzmöglichkeit von statischen
Variablen:
<?php
function individuelleFunktion($parameter1, $parameter2) {
$counter = 0;
echo $counter;
$counter++;
}
?>
Diese Funktion würde die Variable $counter zwar
nach der Ausgabe hoch zählen, sie
aber gleichzeitig bei jedem neuen Aufruf
wieder auf Null setzen. Dies umgeht mit
dem Setzen einer statischen Variable.
<?php
function individuelleFunktion($parameter1, $parameter2) {
static $counter = 0;
echo $counter;
$counter++;
}
?>
Nun wird die Variable $counter beim
ersten Aufruf der Funktion initialisiert,
dann aber nicht wieder. Die Funktion
kann beliebig oft aufgerufen werden,
ohne dass sie wieder auf Null gesetzt
werden würde. Stattdessen wird sie,
wie gewünscht, hoch gezählt.
Eine nützliche Sache bei PHP-Funktionen
sind optionale Parameter. Dabei handelt
es sich um Parameter, die zwar beim Funktionsaufruf
definiert werden, beim Ablauf der Funktion
aber nicht zwingend benutzt werden. Dies
ermöglicht den Aufruf einer Funktion
mit weniger Parametern, als eigentlich
unterstützt werden. Dazu gibt es
die Möglichkeit, den Parametern
in der Parameterliste Standardwerte zuzuweisen,
die verwendet werden, falls nichts übergeben
wird.
<?php
function individuelleFunktion($parameter1, $parameter2 = 'standardwert') {
echo 'erster Wert: '.$parameter1.' und
zweiter Wert: '.$parameter2;
}
individuelleFunktion(4, 1);
// gibt erster Wert: 4 und zweiter Wert: 1 aus
individuelleFunktion(4);
// gibt erster Wert: 4 und zweiter Wert: standardwert aus
?>
So ist es ohne Probleme möglich,
den Funktionsaufruf relativ variabel
zu gestalten und sich keine Gedanken
um möglicherweise nicht zu befüllende
Parameter machen zu müssen.
Kommen wir zu einem der wichtigsten
Eigenschaften einer Funktion, dem Rückgabewert.
Man könnte zwar die Ergebnisse einer
Funktion direkt innerhalb des Funktionsaufrufes
per echo ausgeben, meist macht es aber
mehr Sinn, den entsprechenden Wert in
eine Variable zu schreiben um damit weiterarbeiten
zu können. Wie aus anderen Programmiersprachen
bekannt, wird dies auch bei PHP mit der
Anweisung „return“ erledigt.
Wichtig zu wissen ist, dass mit dem Return-Befehl
gleichzeitig auch die Funktion verlassen
wird. Es ist also nicht möglich,
nach der Return-Anweisung noch Aufrufe
innerhalb der Funktion zu gestalten.
Beispielcode:
<?php
$unixtime = 1249021953;
function individuelleFunktion($time) {
$datum = date('d.m.Y', $time);
return $datum;
echo 'Testausgabe!';
}
echo individuelleFunktion($unixtime);
?>
Hier wird also per Parameterliste der
in die Variable $unixtime gespeicherte
Timestamp an die Funktion übergeben.
Diese wandelt ihn in ein lesbares Datum
um und gibt ihn zurück. Das „echo“ innerhalb
der Funktion wird nicht mehr abgearbeitet,
weil es nach dem Return-Kommando aufgeführt
ist.
Für viele Entwickler ein leidiges
Thema, ist auch bei PHP-Funktionen die
Dokumentation sehr wichtig. Das Kredo,
dass auch bei PHP-Code jeder Programmteil
nur so gut ist wie seine Dokumentation,
sollte sich jeder Anwendungsentwickler
zu herzen nehmen. Schließlich erleichtert
eine gute und möglichst vollständige
Dokumentation nicht nur die eigene Bearbeitung
des Quelltextes zu einem späteren
Zeitpunkt. Auch andere Entwickler finden
sich viel leichter zurecht, wenn der
ursprüngliche Autor möglichst
viel dokumentiert hat.
Zur Dokumentation eigener Funktionen
gibt es zwei Möglichkeiten. Entweder
man dokumentiert direkt im Quelltext
einzelne Codezeilen oder Codeausschnitte
oder man verfasst eine separate Dokumentation.
Im Optimalfall und bei größeren
Projekten vermischt man beide Formen
der Dokumentation und erhält somit
das perfekte Ergebnis. Für professionelle
Zwecke eignet sich auch der Einsatz eines
Dokumentationstools für PHP, zum
Beispiel dem phpDocumentator. Dieses
Vorgehen ist auch nützlich, wenn
der Quelltext an sich einmal verkauft
werden soll, oder wenn die Anwendung
der Open-Source-Gemeinde zur Verfügung
gestellt werden soll. Denn: Kommentierter
und dokumentierter Quelltext hat deutlich
mehr Wert als nicht dokumentierter.
Alles in Allem ist die Verwendung von
PHP-Funktionen, ob vorgefertigt oder
aus der eigenen Feder, eine sehr sinnvolle
Ergänzung für alle, die bisher
bei ähnlichen Abläufen im PHP-Skript
den Quelltext einfach wiederholt haben.
Sie gehören zum Handwerkszeug eines
jeden guten PHP-Entwicklers und sollten
ausgiebig eingesetzt werden. Nützlich
ist es im Übrigen auch, Funktionen
in ein oder mehrere separate Files auszulagern,
der Übersichtlichkeit und Wartbarkeit
wegen.
Weiterführende Links, die vielleicht
für sie auch interessant sein könnten:
Php
Function - die aktuelle deutsche
Dokumentation zum Thema Function auf
der Webseite von www.php.net
weiter Suchen und
Ersetzen mit Php
|