# 4.6.1 Unterprogramme (function) in PHP

Ein Unterprogramm in PHP ist eine `function`. Hier ein Beispiel:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    <?php
    function add($x, $y)
    {
        $z = $x + $y;
        echo "$z";
    }

    $a = 1;
    $b = 2;
    add($a, $b);

Die Funktion wird in Zeile 1 definiert und es wird angegeben, welche Variablen (hier $x und $y) an die Funktion übergeben werden. In den Zeilen 2-5 steht, was die Funktion mit den Variablen macht.

In Zeile 9 wird die Funktion aufgerufen und es werden die Werte der Variablen $a und $b an die Funktion übergeben.

Um zu kennzeichnen, dass es sich bei einem Unterprogramm um eine Prozedur (keine Rückgabe) handelt, verwendet man in der Dokumentation häufig folgende Syntax:

    1
    2
    3
    4
    5
    <?php
    /**
    * Text der erklärt was die Prozedur macht.
    * @return void
    */

Den gesamten Sourcecode schreibt man dann wie folgt.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    <?php
    /**
    * Funktion add zum Addieren zweier Zahlen.
    * @return void
    */
    function add($x, $y)
    {
        $z = $x + $y;
        echo "$z";
    }

    $a = 1;
    $b = 2;
    add($a, $b);

## Werte aus einer Funktion zurückgeben `return`

Im bisherigen Beispiel hatten wir keine Rückgabe, sondern die Funktion hat mit `echo` direkt Daten ausgegeben (also über das PHP-Modul des Webservers zum Browser geschickt). Oftmals möchten wir aber das Ergebnis einer Funktion im Hauptprogramm nutzen. Dann arbeiten wir mit `return`.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    <?php
    function add($x, $y)
    {
        $z = $x + $y;
        return $z;
    }

    $a = 1;
    $b = 2;
    echo add($a, $b);

Achten Sie darauf, wie sich die Zeilen 4 & 9 geändert haben. Die Ausgabe erfolgt nun nicht mehr in der Funktion, sondern zuerst wurde das Ergebnis mit `return` ans Hauptprogramm übergeben und dort dann ausgegeben.

## Initialisieren einer Funktionsvariable mit `static`

Wenn innerhalb einer `function` eine Variable nur einmal initialisiert werden soll, so kann dies mit `static` erfolgen. Dies ist oft nützlich. So könnte man beispielsweise bei einem Online-Shop zählen, wie viele unterschiedliche Waren in den Warenkorb gelegt worden sind. Man müsste hierzu nur eine Funktion haben, die beim ersten Mal "0" ist und dann mit jeder Ware im Warenkorb hochgezählt wird.

    1
    2
    3
    4
    5
    6
    7
    <?php
    function multipleRuns()
    {
        static $a = 0;
        echo $a;
        $a++;
    }

## Verwendung von `global`

Variablen haben in PHP grundsätzlich einen lokalen Gültigkeitsbereich. Also: alle Variablen innerhalb einer Funktion können nur in der Funktion selbst genutzt werden und alle Variablen außerhalb einer Funktion sind in der Funktion wiederum nicht nutzbar.

Somit gilt: eine Variable `$name` kann innerhalb einer Funktion stehen und vielleicht gibt es auch eine Variable `$name` außerhalb der Funktion. So etwas findet man sehr oft und es muss klar sein, dass dies zwei verschiedene Variablen sind.

Wichtig: Die Verwendung von `global` sollte vermieden werden, da dies zu unerwartetem Verhalten und schwer nachvollziehbarem Code führen kann. Stattdessen sollten Variablen als Parameter an Funktionen übergeben werden, um die Abhängigkeiten klarer zu machen und den Code besser testbar zu machen.

## Verwendung von Referenzen

Man kann `function add(&$x, &$y)` schreiben und dann werden an die Variable nicht die Werte, sondern Referenzen übergeben.

Wichtig: Die Verwendung von Referenzen kann in einigen spezifischen Fällen nützlich sein, sollte aber sparsam eingesetzt werden und nur dort, wo es wirklich notwendig ist. In der Regel ist es besser, Werte explizit zurückzugeben, um den Code verständlicher zu machen und unerwartete Seiteneffekte zu vermeiden.