Benannte Argumente in PHP 8 – Schluss mit true, false, null, true
Ein Aufruf wie erstelle($a, true, false, null, true) sagt nichts darüber, was die Wahrheitswerte bedeuten. Mit benannten Argumenten steht es im Aufruf – und optionale Parameter lassen sich überspringen.
Jede gewachsene Codebasis hat diese Aufrufe:
$pdf = erzeuge($daten, true, false, null, true, 'A4');Was ist true? Was false? Man scrollt zur Signatur, zählt Positionen ab, und hofft, dass sich nichts verschoben hat. PHP 8 löst das.
Namen statt Positionen
function erzeuge(
array $daten,
bool $kopfzeile = true,
bool $seitenzahlen = false,
?string $wasserzeichen = null,
bool $komprimieren = true,
string $format = 'A4',
): string { /* … */ }
$pdf = erzeuge(
daten: $daten,
seitenzahlen: true,
format: 'A5',
);Drei Dinge auf einmal: Der Aufruf erklärt sich selbst, die Reihenfolge ist egal, und alles, was du nicht nennst, behält seinen Standardwert – kein null, null, null mehr, nur um an den letzten Parameter zu kommen.
Besonders angenehm bei den Standardfunktionen
// Ohne Namen muss man wissen, was die 4. Stelle tut:
$json = json_encode($wert, JSON_PRETTY_PRINT, 512);
// Mit Namen:
$json = json_encode($wert, flags: JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR);
$teil = str_contains(haystack: $text, needle: 'Rechnung');
$liste = array_slice($werte, offset: 0, length: 10, preserve_keys: true);Zusammen mit Constructor Promotion
final class Auftrag
{
public function __construct(
public readonly string $kunde,
public readonly int $menge = 1,
public readonly ?string $notiz = null,
public readonly bool $eilig = false,
) {}
}
$a = new Auftrag(kunde: 'Muster GmbH', eilig: true);Das ist der Punkt, an dem PHP sich anfühlt wie eine Sprache mit Wertobjekten: ein Konstruktor, sprechende Aufrufe, keine Setter-Kette.
Mischen erlaubt – in dieser Reihenfolge
$pdf = erzeuge($daten, seitenzahlen: true); // erst Position, dann Namen: ok
// $pdf = erzeuge(daten: $daten, true); // Fehler: positional nach benanntAuch beim Entpacken funktioniert es, wenn das Array String-Schlüssel hat:
$optionen = ['format' => 'A5', 'seitenzahlen' => true];
$pdf = erzeuge($daten, ...$optionen);Fallstrick
Mit benannten Argumenten werden Parameternamen Teil deiner öffentlichen Schnittstelle. Wer $kunde in $auftraggeber umbenennt, bricht jeden Aufruf, der den Namen benutzt – in einer Bibliothek ist das eine Breaking Change. Zweitens: Bei internen PHP-Funktionen sind die Namen erst seit PHP 8.0 verlässlich dokumentiert, und einzelne wurden seitdem korrigiert; wenn du eine alte Version unterstützen musst, halte dich dort an Positionen.
Gut lesbarer Code spart bei jeder späteren Änderung Geld. Wenn du dabei Unterstützung brauchst: bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Beträge und Zahlen in PHP formatieren – number_format, sprintf und Intl
1234.5 ist keine Anzeige, sondern ein Wert. Auf der Rechnung soll 1.234,50 € stehen, in der API 1234.50 und im Dateinamen 1234-50. Drei Aufgaben, drei Werkzeuge – und ein Fehler, den fast jeder einmal macht.
Reguläre Ausdrücke in PHP – benannte Gruppen statt $m[3]
Ein Treffer-Array aus Zahlen liest sich nach zwei Wochen wie eine Geheimschrift. Benannte Gruppen geben jedem Teil einen Namen – und preg_replace_callback ersetzt damit Dinge, die kein einfacher Ersetzungsstring kann.
json_decode mit JSON_THROW_ON_ERROR – Fehler, die man nicht übersehen kann
Kaputtes JSON gibt bei json_decode ein stilles null zurück – dasselbe null, das auch im gültigen JSON stehen kann. Ein Flag macht daraus eine Ausnahme, und aus der Fehlersuche wird eine Zeile Stacktrace.