MWCodebymw.de ↗
PHP

?? 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 vorhanden

Der 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 ist

Beide 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

#PHP 8#Null Coalescing#Nullsafe#isset#Sauberer Code

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 →