Bitte warten...

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.

Code kopieren
<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.

Code kopieren
<?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).

Code kopieren
<?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."&nbsp;|&nbsp;&nbsp;");
        }
        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>";
?>