Stel dat je een variabele op wilt halen als een expressie een waarde bevat, anders dan NULL. Of dat je een method aan wilt roepen als een waarde anders is dan NULL. Een eenvoudige manier om dat te doen is natuurlijk:
if($variabele !== null)
of met de php is_null functie:
if(!is_null($variabele))
Maar wat nu als je hiervoor een aantal niveau’s door moet? Bijvoorbeeld als je het land op wilt halen van de ingelogde gebruiker. Dan ontstaat al snel een geneste functie:

Zijn er betere manieren om zo’n functie op te bouwen? Absoluut! Deze code wint zeker niet de award voor ‘clean code’, maar wat ik hiermee will laten zien is duidelijk. Je moet op ieder resultaat opnieuw controleren of de waarde anders is dan null. Veel code en hoge gevoeligheid voor fouten.
Nullsafe operator for the rescue
Dat is waar de PHP 8 nullsafe operator in beeld komt:
?->
Met deze operator kun je een soort ketting maken van de bovenstaande functie:

De nullsafe operator controleert de waarde aan de linker zijde van de operator. Als deze gelijk is aan null, stopt de rest van de uitvoering van de ketting en is het resultaat van de functie null.
Dus, is de $session variable null, dan geeft getUserCountry() ook null als resultaat.
Is de $address variable ($session?->user-?>address) null, dan geeft getUserCountry() ook null als resultaat.
Deze nullsafe operator kun je gebruiken voor iedere chain die je maakt. Ook als je functies achter elkaar gebruikt. De voordelen zijn natuurlijk eenvoudig te raden: veel minder code nodig en minder foutgevoelig omdat er niet steeds handmatig op null-waarden gecontroleerd hoeft te worden.