Eine PHP-Funktion wird mit dem Schlüsselwort function, einem Namen, einer Parameterliste und einem Rumpf definiert; return gibt einen Wert an den Aufrufer zurück. function add(int $a, int $b): int { return $a + $b; } definiert sie, und add(2, 3) ruft sie auf und liefert 5.
Die string und int vor den Parametern sind Typdeklarationen, und : string nach den Klammern ist der Rückgabetyp. Beides ist optional, fängt aber Fehler früh ab und dokumentiert, was die Funktion erwartet.
Rückgabewerte und mehrere Werte zurückgeben
return beendet die Funktion sofort. Eine Funktion ohne return oder mit einem bloßen return; liefert null; deklariere : void, wenn sie nur wegen ihrer Wirkung aufgerufen wird. Eine Funktion gibt einen Wert zurück, aber dieser Wert kann ein Array sein, das du auf der aufrufenden Seite zerlegst:
Die anderen Formen von [...] = stehen unter Array-Destructuring.
Standardparameter und benannte Argumente
Ein Parameter mit = value ist optional: Aufrufer können ihn weglassen. Optionale Parameter stehen nach den Pflichtparametern. Seit PHP 8.0 kann der Aufrufer mit benannten Argumenten jeden Parameter über seinen Namen übergeben und so die optionalen überspringen, die er nicht braucht.
Benannte Argumente machen auch Aufrufe eingebauter Funktionen lesbar: str_pad('7', 3, '0', pad_type: STR_PAD_LEFT). Der Parametername wird Teil der öffentlichen Schnittstelle der Funktion, also kann das Umbenennen eines Parameters Aufrufer kaputtmachen, die Namen verwenden.
Übergabe per Referenz
Normalerweise übergibt PHP eine Kopie jedes Arguments, also kann die Funktion die Variable des Aufrufers nicht ändern. Ein & vor einem Parameter übergibt die Variable selbst. Eingebaute Funktionen wie sort() arbeiten so.
Einen neuen Wert zurückzugeben ist meist klarer, als ein Argument zu ändern. Verwende Referenzen, wenn die Funktion wirklich dafür gedacht ist, etwas direkt zu ändern.
Typdeklarationen und strict_types
Standardmäßig wandelt PHP Argumente in den deklarierten Typ um, wenn es kann: add("5", 3) macht aus "5" den Wert 5. Mit declare(strict_types=1); ganz oben in der Datei schaltest du das für Aufrufe in dieser Datei ab, sodass ein falscher Typ einen TypeError wirft, statt umgewandelt zu werden.
Ohne die Zeile mit declare gibt derselbe Aufruf 8 aus. Strings, die keine Zahlen sind, wie "five", werfen in beiden Modi einen TypeError.
Die Typen, die du für Parameter und Rückgabewerte deklarieren kannst:
never ist ein Rückgabetyp für Funktionen, die immer werfen oder das Skript beenden. Klassen- und Interface-Namen funktionieren ebenfalls als Typen.
Variable Anzahl von Argumenten mit ...$args
...$numbers sammelt beliebig viele Argumente in einem Array. Dasselbe ... auf der aufrufenden Seite verteilt ein Array auf einzelne Argumente.
Eine äußere Variable in einer Funktion verwenden
Eine Funktion hat ihren eigenen Scope. Eine außerhalb definierte Variable ist darin nicht sichtbar, was Umsteiger aus JavaScript überrascht:
<?php
$taxRate = 0.2;
function priceWithTax(float $price): float
{
return $price * (1 + $taxRate); // $taxRate is undefined here
}
Warning: Undefined variable $taxRate in /path/to/index.php on line 6
und die Funktion liefert den Preis ohne Steuer. Übergib den Wert stattdessen als Parameter. So bleibt die Funktion ehrlich darüber, wovon sie abhängt, und leicht testbar:
Das Schlüsselwort global funktioniert auch, versteckt aber die Abhängigkeit; der Scope von Variablen behandelt es. Für kurze Funktionen, die an andere Funktionen übergeben werden, etwa Callbacks für array_map(), siehe anonyme Funktionen, die äußere Variablen mit use einfangen können.
Häufig gestellte Fragen
Wie definiere ich in PHP eine Funktion?
Mit dem Schlüsselwort function, einem Namen, Parametern in Klammern und einem Rumpf: function add(int $a, int $b): int { return $a + $b; }. Aufgerufen wird sie mit add(2, 3). Funktionsnamen unterscheiden keine Groß- und Kleinschreibung, und eine Funktion, die auf oberster Ebene einer Datei definiert ist, lässt sich schon vor der Zeile aufrufen, in der sie steht.
Wie gebe ich in PHP mehrere Werte aus einer Funktion zurück?
Gib ein Array zurück und zerlege es: function minMax(array $a): array { return [min($a), max($a)]; } und dann [$min, $max] = minMax([3, 1, 4]);. Für benannte Ergebnisse gibst du ein assoziatives Array zurück und verwendest ['min' => $min] = ....
Was macht declare(strict_types=1)?
Es schaltet die automatische Typumwandlung für Aufrufe aus dieser Datei ab, sodass die Übergabe von "5" an einen int-Parameter einen TypeError wirft, statt in 5 umzuwandeln. Es muss die allererste Anweisung der Datei sein und gilt nur für diese Datei.
Was sind benannte Argumente in PHP?
Seit PHP 8.0 kannst du Argumente über den Parameternamen übergeben: htmlspecialchars($s, double_encode: false). Sie dürfen nach den positionellen Argumenten in beliebiger Reihenfolge stehen und erlauben es, optionale Parameter zu überspringen, die du nicht ändern willst.
Wie übergebe ich in PHP eine Variable per Referenz?
Setze ein & vor den Parameter: function addOne(int &$n): void { $n++; }. Die Funktion ändert dann die Variable des Aufrufers. Ohne & übergibt PHP eine Kopie, und die Variable des Aufrufers bleibt gleich.