Eine Funktion in PHP ist ein benannter Code-Block, der Parameter annimmt und optional einen Wert zurückgibt. PHP unterstützt Typ-Deklarationen (function f(int $x): string), Default-Werte, Nullable-Types (?string), Named Arguments (seit 8.0) und First-Class Callables (seit 8.1): $fn = strlen(...).
Grundform mit Typ-Deklaration
function berechneMwst(float $netto, float $satz = 0.19): float {
return $netto * $satz;
}
echo berechneMwst(100.00); // 19
echo berechneMwst(100.00, 0.07); // 7
Named Arguments (PHP 8.0+)
Erlauben Argumente per Namen zu übergeben. Perfekt bei Funktionen mit vielen optionalen Parametern:
function createUser(
string $email,
string $name,
bool $sendWelcome = true,
?string $referral = null,
string $locale = 'de',
): User {
// ...
}
// Statt Reihenfolge zu merken:
createUser(
email: 'anna@example.com',
name: 'Anna',
locale: 'en',
sendWelcome: false,
);
Variadic Functions (...$args)
function summe(int ...$zahlen): int {
return array_sum($zahlen);
}
echo summe(1, 2, 3, 4); // 10
// Unpacking beim Aufruf:
$werte = [1, 2, 3];
echo summe(...$werte); // 6
Arrow-Functions (PHP 7.4+)
Kurz-Syntax für einzeilige Callbacks. Der äußere Scope ist automatisch verfügbar (kein use()):
$faktor = 1.19;
$brutto = array_map(fn(float $netto) => $netto * $faktor, $preise);
// Klassische Closure zum Vergleich:
$brutto = array_map(
function (float $netto) use ($faktor) {
return $netto * $faktor;
},
$preise
);
Union-, Nullable- und Intersection-Types
function findUser(int|string $identifier): ?User {
// Akzeptiert int ODER string, gibt User oder null zurück
}
// Intersection (PHP 8.1+): Muss beide Interfaces implementieren
function process(Countable&Iterator $items): void { ... }Häufige Fragen
Was sind Named Arguments?
Seit PHP 8.0: Argumente per Name statt Position übergeben: setcookie(name: "u", expires_or_options: time()+3600). Nützlich bei Funktionen mit vielen optionalen Parametern.
Wann nutze ich Arrow-Functions statt Closures?
Arrow-Functions (fn($x) => $x * 2, PHP 7.4+) capturen automatisch Variablen aus dem Parent-Scope read-only, erlauben nur einen Ausdruck. Für längere Logik: klassische Closure mit use ($var).
Was bedeutet <code>: void</code> als Rückgabetyp?
Die Funktion gibt explizit nichts zurück. return; ohne Wert ist erlaubt, return $x; ist Fehler. Verwendet für Setter, Logger oder Side-Effect-Methoden.
Wie typisiere ich einen Array-Parameter mit bekannter Struktur?
Als Union oder DNF-Type nicht möglich. Nutze stattdessen ein readonly class oder ein Objekt-Value-Object: function f(User $u). Für reine Daten: PHPStan/Psalm-Shape-Annotations (@param array{id: int, name: string} $u).
Was sind First-Class Callables?
Seit PHP 8.1: $fn = strlen(...) erzeugt ein Closure-Objekt aus jeder Funktion/Methode. Löst die alten Strings "strlen" und Arrays [$obj, "method"] als Callables ab — typsicher und IDE-freundlich.