Best way to give a variable a default value (simulate Perl ||, ||= )
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
.
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';
Thanks for all the great answers!
For anyone else coming here for a possible alternative, here are some functions that help take the tedium out of this sort of thing.
function set_if_defined(&$var, $test){ if (isset($test)){ $var = $test; return true; } else { return false; }}function set_unless_defined(&$var, $default_var){ if (! isset($var)){ $var = $default_var; return true; } else { return false; }}function select_defined(){ $l = func_num_args(); $a = func_get_args(); for ($i=0; $i<$l; $i++){ if ($a[$i]) return $a[$i]; }}
Examples:
// $foo ||= $bar;set_unless_defined($foo, $bar);//$foo = $baz || $bletch$foo = select_defined($baz, $bletch);
I'm sure these can be improved upon.