?? und ?-> in PHP – null-Werte elegant abfangen
Endlose isset()-Prüfungen? Mit dem Null-Koaleszenz-Operator ?? und dem Nullsafe-Operator ?-> greifst du sicher auf womöglich fehlende Werte zu – oft in einer einzigen Zeile.
Zwei Operatoren räumen in PHP mit dem isset()-Wust auf: ?? liefert einen Ersatzwert, wenn etwas fehlt oder null ist, und ?-> ruft eine Methode nur auf, wenn das Objekt existiert.
Der Null-Koaleszenz-Operator ??
?? gibt den linken Wert zurück, wenn er gesetzt und nicht null ist – sonst den rechten. Anders als ?: wirft es keine Warnung bei fehlenden Schlüsseln:
// vorher
$seite = isset($_GET['seite']) ? $_GET['seite'] : 1;
// mit ??
$seite = $_GET['seite'] ?? 1;
// verkettbar: erster gesetzter Wert gewinnt
$name = $_POST['name'] ?? $user['name'] ?? 'Gast';Mit ??= weist du nur zu, wenn noch nichts da ist:
$config['timeout'] ??= 30; // setzt 30 nur, falls nicht vorhandenDer Nullsafe-Operator ?->
Eine Kette wie $user->getProfil()->getStadt() knallt, sobald getProfil() einmal null liefert. ?-> bricht die Kette dann sauber ab und liefert einfach null:
// vorher – verschachtelte Prüfungen
$stadt = null;
if ($user !== null) {
$profil = $user->getProfil();
if ($profil !== null) $stadt = $profil->getStadt();
}
// mit ?->
$stadt = $user?->getProfil()?->getStadt(); // null, wenn irgendwas null istBeide kombinieren sich prima: $stadt = $user?->getProfil()?->getStadt() ?? 'unbekannt';
Ein Hinweis zur Abgrenzung: ?? prüft auf null/nicht gesetzt, nicht auf „leer". Ein leerer String '' oder die 0 sind gesetzt und gehen durch – willst du die auch abfangen, brauchst du eine echte Prüfung. Für den häufigen „fehlt oder null"-Fall sind die beiden Operatoren aber Gold wert.
Solchen aufgeräumten Code schreibe ich in jedes Backend. Wenn du eine Website mit sauberer Codebasis 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
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.
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.