在 PHP 三元 shorthand 运算符中使用 isset() 时获取变量的值

Get value of variable when isset() is used in PHP ternary shorthand operator

在使用更短的三元运算符时:

$foo = isset($_GET['bar']) ?: 'hello';

如果设置了$_GET['bar'],是否有可能$foo到return $_GET['bar']的值而不是true

编辑:我理解老派的三元作品,例如

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';

但我想使用更短的 newschool 三元组

是的,你会这样做

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';

像这样:

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';

我不确定我是否理解你的问题,但它是否类似于:

$foo = isset($_GET['bar']) ? true : 'hello';

如果设置了该变量,这将为您提供一个(真),如果未设置,则只提供 hello。

答案是否定的(至少在 PHP5 中,请参阅克里斯对 PHP7 的回答)。出于这个原因,我倾向于使用辅助函数,例如

function isset_or(&$variable, $default = NULL)
{
    return isset($variable) ? $variable : $default;
}

$foo = isset_or($_GET['bar'], 'hello');

听起来你问的是新的(截至 PHP 7)null coalesce operator。你可以这样做:

$foo = $_GET['bar'] ?? 'hello';
echo $foo;

如果 $_GET['bar'] 为 null 会将 $foo 设置为 hello

The first operand from left to right that exists and is not NULL. NULL if no values are defined and not NULL. Available as of PHP 7.

功能演示:https://3v4l.org/0CfbE

$foo = $_GET['bar'] ?? 'hello';
echo $foo . "\n";
$_GET['bar'] = 'good bye';
$foo = $_GET['bar'] ?? 'hello';
echo $foo;

输出:

hello
good bye

补充阅读:http://www.lornajane.net/posts/2015/new-in-php-7-null-coalesce-operator