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

时间:2015-11-11 20:46:31

标签: php syntax operators ternary-operator php-7

使用较短的三元运算符:

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

如果设置了$_GET['bar']$foo是否可以返回$_GET['bar']而不是true的值?

编辑:我理解旧学校的三元作品,例如,

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

但我想使用newschool三元版本,这是更短的版本

5 个答案:

答案 0 :(得分:4)

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

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

如果$_GET['bar']为空,则将$foo设置为hello

  

从左到右的第一个操作数存在且不为NULL。如果未定义任何值且为NULL,则为NULL。从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

答案 1 :(得分:0)

是的,你会这样做

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

答案 2 :(得分:0)

类似的东西:

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

答案 3 :(得分:0)

我不确定我理解你的问题,但它是这样的:

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

如果设置了该变量,这将给你一个(true),如果不设置则给你一个hello。

答案 4 :(得分:0)

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

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

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