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 { ... }