C#'s null coalescing operator (??) in PHP
PHP 7 adds the null coalescing operator:
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
You could also look at short way of writing PHP's ternary operator ?: (PHP >=5.3 only)
// Example usage for: Short Ternary Operator
$action = $_POST['action'] ?: 'default';
// The above is identical to
$action = $_POST['action'] ? $_POST['action'] : 'default';
And your comparison to C# is not fair. "in PHP you have to do something like" - In C# you will also have a runtime error if you try to access a non-existent array/dictionary item.
The Null Coalesce Operator, (??
) has been accepted and implemented in PHP 7. It differs from the short ternary operator (?:
) in that ??
will suppress the E_NOTICE
that would otherwise occur when attempting to access an array where it doesn't have a key. The first example in the RFC gives:
$username = $_GET['user'] ?? 'nobody';
// equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
Notice that the ??
operator does not require the manual application of isset
to prevent the E_NOTICE
.
I use function. Obviously it is not operator, but seems cleaner than your approach:
function isset_or(&$check, $alternate = NULL)
{
return (isset($check)) ? $check : $alternate;
}
Usage:
isset_or($_REQUEST['test'],'hi');
Prior to PHP 7, there isn't. If you need to involve isset
, the pattern to use is isset($var) ? $var : null
. There's no ?:
operator that includes the characteristics of isset
.