PHP's double question mark, or the null coalescing operator

PHP's double question mark, or the null coalescing operator

Modified
Sep 19, 2023
Written by
Benjamin Crozat
0
comments
2 minutes
read

The null coalescing operator (??), or the double question mark

The null coalescing operator, or double question mark, was introduced in PHP 7.0 and is a handy shortcut that helps you write cleaner and more readable code. It’s represented by two question marks ??.

Let’s say you want to get a value from a variable, but if that variable is not set or is null, you want to use a default value instead. You can use the ?? operator to do this in one step.

For example:

$name = $_GET['name'] ?? 'Unknown';

This line of code will set $name to $_GET['name'] if it’s set and not null. Otherwise, it will set $name to “Unknown”.

You can also chain them together like this:

$foo = $foo ?? $bar ?? 'baz';

This will check $foo first, then $bar, and use “baz” if neither are set and not null.

The null coalescing assignment operator (??=), or the double question mark equals

PHP 7.4 introduced a new shortcut, ??= (double question mark equals), also called the null coalescing assignment operator. This is used when you want to set a variable to a new value only if it’s currently not set or null.

It’s hard to make up a good example, but here’s a simplified one from this very blog’s codebase:

function do_something(DateTime $from, DateTime $to = null)
{
    // Using the ternary operator.
    $to = $to ? $to : new DateTime('now');

    // Using the Elvis operator.
    $to = $to ?: new DateTime('now');

    // Using the null coalescing assignment operator.
    $to ??= new DateTime('now');

    // Do something.
}

This will set $to to a new DateTime instance only if it’s not already set (or null in that case).


Did you like this article? Then, keep learning: