Best way to give a variable a default value (simulate Perl ||, ||= )
I love doing this sort of thing in Perl: $foo = $bar || $baz
to assign $baz
to $foo
if $bar
is empty or undefined. You also have $foo ||= $bletch
which will only assign $bletch
to $foo
if $foo
is not defined or empty.
The ternary operator in this situation is tedious and tiresome. Surely there's a simple, elegant method available in PHP?
Or is the only answer a custom function that uses isset()?
Solution 1:
PHP 5.3 has a shorthand ?:
operator:
$foo = $bar ?: $baz;
Which assigns $bar
if it's not an empty value (I don't know how this would be different in PHP from Perl), otherwise $baz
, and is the same as this in Perl and older versions of PHP:
$foo = $bar ? $bar : $baz;
But PHP does not have a compound assignment operator for this (that is, no equivalent of Perl's ||=
).
Also, PHP will make noise if $bar
isn't set unless you turn notices off. There is also a semantic difference between isset()
and empty()
. The former returns false if the variable doesn't exist, or is set to NULL
. The latter returns true if it doesn't exist, or is set to 0
, ''
, false
or NULL
.
Solution 2:
In PHP 7 we finally have a way to do this elegantly. It is called the Null coalescing operator. You can use it like this:
$name = $_GET['name'] ?? 'john doe';
This is equivalent to
$name = isset($_GET['name']) ? $_GET['name']:'john doe';