Shorthand comparisons in PHP

If you are a programmer then you may already know about comparison operators or shorthand comparisons.

Let’s understand how the ternary ?:, the null coalescing ?? and the spaceship <=> operators works in PHP.

  • The ternary operator is a shorten of if/else structures
  • The null coalescing operator is used to provide default values instead of null
  • The spaceship operator is used to compare two values

Ternary operator

The ternary operator is a shorthand for the if {} else {} structure. Instead of you write full if block:

<?php
$isAuthenticated = true;
if ($isAuthenticated) {
    $online = true;
} else {
    $online = false;
}

You can write this:

<?php
$online = $isAuthenticated ? true : false;

In above shorthand if statement, if $isAuthenticated is evaluated as true; $online will be set to true otherwise false.

PHP 5.3+ allows  to leave out the lefthand operand, allowing for even shorter expressions:

<?php
$online = $isAuthenticated ?: false;

Null coalescing operator

The null coalescing operator is available since PHP 7.0. It similar to the ternary operator but behaves like isset.

It is especially useful for arrays and assigning defaults values to the variable when it is not set.

<?php
$undefined ?? 'default'; // 'default'

$unassigned;
$unassigned ?? 'default'; // 'default'

$assigned = 'hello';
$assigned ?? 'default'; // 'hello'

'' ?? 'default'; // ''
'hello' ?? 'default'; // 'hello'
'0' ?? 'default'; // '0'
0 ?? 'default'; // 0
false ?? 'default'; // false

Coalescing operator takes two operands, and decide which of those to use based on the value of the lefthand operand.

Null coalescing on arrays

As it is mentioned earlier that, this operator is very useful in combination with arrays, let’s take a look at examples:

<?php
$user = [
    'username' => 'danyal',
    'roles' => [
        'id' => 120,
        'name' => 'Admin'
    ]
];

$input['username] ?? 'fallback'; // 'danyal'
$input['roles']['id'] ?? null; // 120
$input['undefined'] ?? 'fallback'; // 'fallback'
$input['roles']['undefined'] ?? 'fallback'; // 'fallback'

null ?? 'fallback'; // 'fallback'

Spaceship operator

The spaceship operator is used for comparing two expressions. It returns -1, 0 or 1 when $a is respectively less than, equal to, or greater than $b

<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

About the author

Danyal Ali Butt

I'm working as programmer since 2002. Born, grew up, studied and worked in Pakistan now Im located in Denmark since 2006.

View all posts