PHP: Benutzerdefinierte Funktionen
Neben den vordefinierten Funktionen können in PHP, wie in den meisten anderen Programmiersprachen auch, eigene Funktionen definiert werden. Dazu wird die Funktion function() gefolgt von einem relativ frei wählbaren Namen verwendet. Nur bereits existierende Namen und Schlüsselbegriffe dürfen nicht verwendet werden.
Funktionen ohne Rückgabewert
Eine Funktion kann dazu verwendet werden, mehrfach auftretende Programmabläufe an einer Stelle zu beschreiben und dann bei Bedarf aufzurufen. Dies entspricht dem Konzept der Prozedur in anderen Programmiersprachen.
<style>
td { border:1px solid #ccc; background-color:#dae; }
</style>
<?php
function tabelle_anfang() {
echo "<div style='text-align:center;'><table style='width:400px;margin:auto;border-collapse:collapse;'>";
}
function tabelle_ende() {
echo "</table></div><br>";
}
tabelle_anfang();
echo "<tr><td>Zelle1</td><td>Zelle2</td><td>Zelle3</td></tr>";
echo "<tr><td>Zelle1</td><td>Zelle2</td><td>Zelle3</td></tr>";
tabelle_ende();
tabelle_anfang();
echo "<tr><td>Zelle1</td><td>Zelle2</td><td>Zelle3</td></tr>";
echo "<tr><td>Zelle1</td><td>Zelle2</td><td>Zelle3</td></tr>";
tabelle_ende();
?>
Funktionen mit Rückgabewert(en)
Häufig werden benutzerdefinierte Funktionen aber auch dazu verwendet, bestimmte Daten zu berechnen, die dann wieder ausgegeben werden. Ebenso kann über eine solche Funktion z. B. auch eine bestimmte Zeichenkette oder ein Array oder eine Reihe gemischter Variablen erzeugt werden.
<?php
function kreisflaeche($r) {
$a = pi() * pow($r, 2);
return $a;
}
$radius = 3.5;
$flaeche = kreisflaeche($radius);
echo "Die Fläche eines Kreises mit dem Radius ".$radius." m beträgt ".$flaeche." m².";
?>
In der Klammer nach dem Namen der Funktion (Zeile 2) werden allen durch den Funktionsaufruf (Zeile 7) übergebenen Variablen funktionsinterne Namen zugewiesen.
In Zeile 7 wird die Funktion kreisflaeche() aufgerufen und die Variable $radius an diese übergeben.
Durch den Befehl return in Zeile 4 wird der Wert der internen Variable $a an die Variable $flaeche in Zeile 7 zurückgegeben.
Rekursive Funktionen
Funktionen können sich auch selbst aufrufen, wie in dem folgenden Beispiel veranschaulicht wird. Mit der benutzerdefinierten Funktion scan_dir() wird ein Verzeichnisbaum erzeugt und der verwendete Speicherplatz eines jeden Ordners ausgerechnet und angezeigt. Um in die jeweiligen Unterverzeichnisse eines Ordners zu gelangen, muss die Funktion sich selbst aufrufen (Zeile 12).
<?php
function scan_dir($dir, $pre) {
$dh = opendir($dir);
while ($file = readdir($dh)) {
if (filetype($dir.$file) == "dir" && $file != "." && $file != "..") {
$dir2 = $dir.$file."/";
$dh2 = opendir($dir.$file);
$total_dir = 0;
while ($file2 = readdir($dh2)) if (filetype($dir2.$file2) == "file") $total_dir += filesize($dir2.$file2);
closedir($dh2);
echo $pre.$file." --- ".number_format($total_dir, 0, ".", " ")." Bytes<br>";
$total_all += scan_dir($dir2, $pre." | ");
}
if (filetype($dir.$file) == "file") $total_all += filesize($dir.$file);
}
closedir($dh);
return $total_all;
}
$dir = "../";
echo "<div style='font-family:monospace;'>";
$total_all = scan_dir($dir, "");
echo "<br><br>Total: ".number_format($total_all, 0, ".", " ")." Bytes</div>";
?>