Get "PHP 8 in a Nuthshell" (Now with PHP 8.4)
Amit Merchant

Amit Merchant

A blog on PHP, JavaScript, and more

This nullsafe operator could come in PHP 8

Have you ever wanted a feature where you would only want to call a method or fetch a property on the result of an expression if it is not null? So, for instance, check the following code.

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}

The code looks for the null check for each property before going onto the next chain of the property/method. It do so by storing the intermediate values in the buffer properties in each condition and go on for the null check on the next property in the chain.

This is quite a hassle right now as you can observe. This scenario can be improved if this RFC gets approved.

Update: The RFC has been implemented to be included in PHP 8 which is scheduled to be released on November 26, 2020.

The nullsafe operator

Essentially, the RFC proposes a new operator called nullsafe operator ?-> with full short-circuiting.

How this works is when the left hand side of the operator evaluates to null the execution of the entire chain will stop and evalute to null. When it is not null it will behave exactly like the normal -> operator.

So, the above code can be rewritten with nullsafe operator like so.

$country = $session?->user?->getAddress()?->country;

If the $session is null, it won’t try fetch the user. It will rather return null and terminates the chain right at that point.

The same would be applied to all the properties/methods in the chain like so. This is called as short-circuiting which means when the evaluation of one element in the chain fails the execution of the entire chain is aborted and the entire chain evaluates to null.

This is really convient as it effectively reduces the number of line of the code and in addition to that there would be less chance of the human error as you don’t check for the null checks explicitly.

The feature is scheduled to be included in PHP 8 if this RFC gets approved.

Fingers crossed!

More in PHP 8

Learn the fundamentals of PHP 8 (including 8.1, 8.2, 8.3, and 8.4), the latest version of PHP, and how to use it today with my new book PHP 8 in a Nutshell. It's a no-fluff and easy-to-digest guide to the latest features and nitty-gritty details of PHP 8. So, if you're looking for a quick and easy way to PHP 8, this is the book for you.

Like this article?

Buy me a coffee

👋 Hi there! I'm Amit. I write articles about all things web development. You can become a sponsor on my blog to help me continue my writing journey and get your brand in front of thousands of eyes.

Comments?