Login
Newsletter
Werbung

So, 14. Januar 2001, 00:00

PHP Workshop: Funktionen

PHP Workshop: Funktionen.

Syntax

Wenn Sie ein bestimmtes Code-Fragment in einem Skript häufiger benötigen, sollten Sie eine Funktion daraus machen und sie an den entsprechenden Stellen aufrufen. Dadurch werden Ihre Skripte kürzer und leichter lesbar.

Eine Funktion könnte in PHP folgendermaßen definiert werden:

function summe($zahl, $zahl2)
{
 return $zahl + $zahl2;
}

Die Funktion summe erwartet als Parameter zwei Zahlen und gibt die Summe der beiden Zahlen zurück. Anders als in den meisten anderen Programmiersprachen müssen Sie in PHP keinen Rückgabewert definieren. Es genügt, einfach mit der Anweisung return einen Wert zurückzugeben.

Aufruf der Funktion summe:

$neuezahl = summe(9, 5);
print $neuezahl;

Das Skript würde die Summe aus 9 und 5, also 14 ausgeben.

Für den letzten Funktionsparameter können Sie auch einen Standardwert angeben.

Beispiel:

function paramBeispiel($param1, $param2 = 0)
{
 ...
}

Die Funktion kann entweder mit einem oder mit zwei Parametern aufgerufen werden. Wird sie nur mit einem Parameter aufgerufen, so hat der Parameter $param2 den Wert 0.

Wiederverwendbarkeit

Falls Sie bestimmte Funktionen in mehreren Skripten oder gar in unterschiedlichen Projekten benötigen (z.B. Gültigkeit einer Email-Adresse überprüfen), empfiehlt es sich, diese Funktionen in einer zentralen Include-Datei unterzubringen. Sobald Sie eine der Funktionen benötigen, müssen Sie nur die entsprechende Datei per include oder require einbinden. Ein üblicher Dateiname wäre z.B.: lib.inc.php.

Globale und lokale Variablen

Wenn Sie innerhalb einer Funktion eine Variable definieren (z.B. indem Sie ihr einfach einen Wert zuweisen), dann ist sie eine lokale Variable. Das heißt, Sie können sie nur in der Funktion verwenden, in der sie definiert wurde. Eine Variable, die außerhalb einer Funktion definiert wurde, bezeichnet man als global, da man von jeder Funktion aus auf sie zugreifen kann.

Eine kleine Besonderheit im Vergleich zu anderen Programmiersprachen gibt es allerdings in PHP. Wenn Sie in einer Funktion auf eine globale Variable zugreifen möchten, dann müssen Sie die Variable zuerst mit dem Schlüsselwort global deklarieren. Das soll verhindern, dass man unbeabsichtigt eine globale Variable verwendet, obwohl man eigentlich mit einer lokalen Variablen arbeiten wollte (z.B. wegen eines Tippfehlers). Dieses Feature wurde deshalb in PHP eingebaut, da solche Fehler schwer zu finden sind und einen leicht zur Verzweiflung treiben können.

Beispiel:

$globalvar = "Dies ist eine globale Variable!";
function printGlobalVar()
{
 global $globalvar;
 print $globalvar;
}
printGlobalVar();

Die Funktion printGlobalVar gibt die globale Variable $globalvar aus. Wäre $globalvar nicht explizit mit global als globale Variable deklariert, dann würde PHP beim ersten Zugriff einfach eine neue lokale Variable erzeugen. Die Variable wäre also leer und print würde gar nichts ausgeben.

Variable Parameterlisten

Wie Sie bereits wissen, können Sie den letzten Parameter einer Funktion optional machen, indem Sie ihm einfach einen Defaultwert zuweisen. Sie können aber auch eine variable Parameterliste mit beliebig vielen Parametern verwenden, die in jeder beliebigen Reihenfolge stehen können. Dies erreichen Sie, indem Sie der Funktion als einzigen Parameter ein assoziatives Array übergeben.

Schauen Sie sich dazu folgende Funktion an:

function inputBox($param = array())
{
 $inputbox = "<input type=\"text\"
name=\"".$param["name"]."\"
value=\"".$param["value"]."\"
size=\"".$param["size"]."\">";
 return $inputbox;
}

Die Funktion inputBox erwartet als Parameter ein assoziatives Array. Das Array kann die Felder "name", "value" und "size" enthalten. Aus diesen Daten generiert sie dann den HTML-Code für ein Eingabefeld.

Ein Aufruf von inputBox könnte so aussehen:

print inputBox(array("name" => "eingabefeld1",
"value" => "InputBox", "size" => "20"));

Und würde diesen HTML Code zurückliefern:

<inputBox type="text" name="eingabefeld1"
value="Wert" size="20">

Da inputBox als Parameter ein assoziatives Array erwartet, ist es egal, in welcher Reihenfolge die einzelnen Parameter stehen, oder ob sie alle vorhanden sind.

Call by Value und Call by Reference

Wenn Sie eine Variable als Parameter an eine Funktion übergeben, dann erhält die Funktion normalerweise nur eine Kopie der übergebenen Variablen. Das bezeichnet man auch als Call by Value. Wollen Sie nun den Wert der übergebenen Variablen ändern, dann verändern Sie nur ihre lokale Kopie.

Eine Lösung wäre es, wenn Sie einfach wie oben gezeigt mit einer globalen Variablen arbeiten. Sofern sie mit global deklariert wurde, können Sie ihren Wert beliebig aus einer Funktion heraus verändern. Viele globale Variablen machen Ihre Skripte aber schnell sehr unübersichtlich und fehleranfällig. Ein weiterer Nachteil ist, dass die Funktion dann schwerer wiederverwendbar ist, da sie ja auf eine spezielle globale Variable angewiesen ist.

Die bessere Lösung ist es, der Funktion nicht die Variable, sondern eine Referenz auf die Variable zu übergeben. Das erreichen Sie, indem Sie vor dem Variablennamen ein & notieren. Also z.B. funktion(&$variable). Dadurch wird der Funktion jetzt nicht mehr der Wert der Variable, sondern ihre Speicheradresse mitgeteilt. Das nennt man Call by Reference. Nun können Sie den Wert der tatsächlichen Variablen verändern.

Beispiel:

$test = "alter Wert";
function callByRef(&$param)
{
 $param = "neuer Wert";
}
callByRef($test);
print $test;

Hier wird die Variable $test an die Funktion callByRef übergeben. Die Funktion callByRef ändert den Wert von $test von "alter Wert" in "neuer Wert". Wenn Sie das & vor $param entfernen, dann wird nur eine Kopie von $test an callByRef übergeben und callByRef kann den tatsächlichen Wert von $test nicht mehr verändern. Das Skript gibt in dem Fall "alter Wert" aus.

Rekursive Funktionen

Eine rekursive Funktion ist eine Funktion, die sich so lange selbst aufruft, bis eine bestimmte Bedingung erfüllt ist.

Beispiel:

function countdown($startwert)
{
 print $startwert."<br />";
 if ($startwert > 0)
 {
 countdown($startwert-1);
 }
}

Die Funktion countdown gibt den als Parameter übergebenen Startwert aus. Wenn $startwert größer als 0 ist, ruft sie als nächstes sich selbst mit einem um 1 kleineren Startwert auf.

Solche rekursiven Funktionen werden in PHP vor allem verwendet, um damit eine Datenbank-Tabelle rekursiv auszugeben. Diese Technik wird z.B. in Webforen verwendet. In einem der nächsten Workshop-Teile werde ich mich noch genauer mit rekursiven Datenbankabfragen auseinandersetzen.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung