Start · Sprachen · PHP · Kapitel · Funktionen
// Kapitel · PHP

Funktionen

Klassische Funktionen, Arrow-Functions, Named Arguments und Typ-Deklarationen — alles was du für saubere APIs brauchst.

Kurzantwort
Funktionen in PHP — kurz erklärt

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.