DEV Community

Cover image for PHP double question marks (Null coalescing operator) explained
Reza Lavarian
Reza Lavarian

Posted on Originally published at decodingweb.dev

PHP double question marks (Null coalescing operator) explained

Update: This post was originally published on my blog decodingweb.dev, where you can read the latest version for a 💯 user experience. ~reza

PHP double question marks (??) – officially known as Null coalescing operator – is a convenient alternative to ternary expressions in conjunction with isset().

You might have seen the following expression in your Laravel or PHP projects:

<?php

$result = $value ?? $alternativeValue;
Enter fullscreen mode Exit fullscreen mode

But what do two question marks mean in PHP?

The above expression returns its first operand ($value) if it exists and is not null; otherwise, it returns the second operand ($alternativeValue).

The above expression is equivalent to:

<?php

$result = isset($value) ? $value : $alternativeValue;
Enter fullscreen mode Exit fullscreen mode

How to use PHP double question marks

Before the Null coalescing operator, you'd have to use a ternary operator with a call to isset():

<?php

$iceCreamFlavor = isset($_POST['flavor']) ? $_POST['flavor'] : 'vanilla';
Enter fullscreen mode Exit fullscreen mode

Or as an if statement:

<?php

$iceCreamFlavor = 'vanilla';

if (isset($_POST['flavor'])) {
  $iceCreamFlavor = $_POST['flavor'];
}
Enter fullscreen mode Exit fullscreen mode

But with the Null coalescing operator, you can summarize it into:

<?php

$iceCreamFlavor =$_POST['flavor'] ?? 'vanilla';
Enter fullscreen mode Exit fullscreen mode

You can also chain multiple operators:

<?php

$display_name =  $first_name ?? $last_name ?? 'Anonymous';
Enter fullscreen mode Exit fullscreen mode

The above code will return the first defined value among $first_name, $last_name, and Anonymous.

The Null coalescing operator has been added to PHP since version 7.

I hope you found this quick tip helpful :-)

Thanks for reading!


❤️ You might like:

Top comments (0)