10. PHP-Modularisierung
PHP Funktionen
Das folgende Stück aus Pseudocode zeigt eine allgemeine PHP Funktion. Die Parameterliste ist mit einem Komma getrennt.
function Funktionsname(Parameterliste) {
//Anweisungen
}
Hier nun ein explizites Beispiel einer Funktion welche zwei Parameter entgegen nimmt und diese ausgibt miteinander verkettet.
function test($Wort1, $Wort2) {
echo $Wort1 . $Wort2;
}
Die über diesem Absatz definierte Funktion wird nun im Folgenden aufgerufen:
test("Hallo", " Welt");
Das folgende Beispiel definiert nun eine Funktion mit Rückgabewert. In diesem Fall wird lediglich der Paramter welcher der Funktion übergeben wird zurückgegeben.
function test($Wert) {
return $Wert;
}
echo test("Hallo");
Dieses Beispiel ist nun ein klein wenig komplizierter und verbindet Funktionsargument, Verarbeitung in der Funktion und Rückgabe mit der Ausgabe des zurück gegebenen Wertes. Es verdeutlicht auch das Prinzip “Call-By-Value”.
function test($Wert) {
$Wert++;
return $Wert;
}
$Zahl=1;
echo $Zahl . "/" . test($Zahl) . "/" . $Zahl;
Dieses Beispiel ist nun ein klein wenig komplizierter und verbindet Funktionsargument, Verarbeitung in der Funktion und Rückgabe mit der Ausgabe des zurück gegebenen Wertes. Es verdeutlicht auch das Prinzip “Call-By-Reference”.
function test(&$Wert) {
$Wert++;
return $Wert;
}
$Zahl=1;
echo $Zahl . "/" . test($Zahl) . "/" . $Zahl;
Dieses Beispiel soll nun verdeutlichen das es verschiedene Gültigkeitsbereiche in PHP gibt. Die Namensgebung einer Variable muss lediglich im selben Bereich eindeutig sein.
$Zahl=1;
function test() {
$Zahl=2;
return $Zahl;
}
echo $Zahl . "/" . test() . "/" . $Zahl;
Das Schlüsselwort global
sucht nach einer Variable mit der Bezeichnung, die darauf folgt und macht sie für den lokalen
Bereich verfügbar. Dies sollte sparsam eingesetzt werden, da es einfach übersehen werden kann und auch schnell Fehler
produziert.
$Zahl=1;
function test() {
global $Zahl;
$Zahl=2;
return $Zahl;
}
echo $Zahl . "/" . test() . "/" . $Zahl;
Arrays als Funktionsparameter und Rückgabewerte
$arDaten = array(123, 456, 789);
function AusgabeInhalte($arWerte){
foreach($arWerte as $Element)
echo $Element . "<br>";
}
AusgabeInhalte($arDaten);
function test(){
$arDaten[] = 456;
$arDaten[] = 123;
$arDaten[] = 789;
return $arDaten;
}
$arWerte = test();
// Variante 1
for($i=0; $i<count($arWerte); $i++)
echo $arWerte[$i] . "<br>\n ";
// Variante 2
foreach ($arWerte as $Eintrag)
echo $Eintrag . "<br>\n ";
Auslagern von Quellcode - require vs include
Wenn ein Projekt eine gewisse Größe erreicht ist es nicht mehr sinnvoll irgendwann alles in einer Datei zu pflegen.
Der PHP Interpreter liest aber normalerweise trotzdem nur die gerade angefragte Datei des Webservers. Um dieses Problem
zu lösen, gibt es die Schlüsselwörter require
und include
. Beide Schlüsselwörter laden an der Stelle wo sie stehen
eine weitere angegebene PHP Datei herein und interpretieren diese, nachdem die Interpretation abgeschlossen ist, wird
die Interpretation der “übergeordneten” Datei fortgesetzt.
Wichtig zu wissen ist folgender Effekt: Wir haben die folgenden beiden Dateien
main.php
<?php
require ("Funktionen.inc.php");
Ausgabe();
?>
Funktionen.inc.php
<?php
function Ausgabe(){
echo "externes Hallo";
}
echo "Jetzt kommt ein <br>";
?>
Das Ergebnis ist nun folgendes nach dem Interpretieren der Datei:
<?php
function Ausgabe(){
echo "externes Hallo";
}
echo "Jetzt kommt ein <br>";
Ausgabe();
?>
Was bedeutet das nach dem Ausführen der vollständigen PHP-Datei das ganze so aussieht:
Jetzt kommt ein <br>
externes Hallo
Wir hätten obigen Code natürlich auch statt require("Funktionen.inc.php)
mit include("Funktionen.inc.php)
schreiben
können. Warum haben wir das nicht?
Der Unterschied von require
vs include
ist das Verhalten wenn die Datei Funktionen.inc.php
nicht gefunden werden
kann. require
gibt an der Stelle einen fatalen Fehler aus und beendet die Ausführung des Skriptes, wohingegen
include
lediglich eine Warnung ausgibt und anschließend mit der Ausführung des Skriptes fortführt. Je nach
Anwendungsfall kann es sein das das eine oder andere Schlüsselwort sinnvoller ist oder eben nicht.