2

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

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

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

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

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

但我想使用更短版本的新学校三元

4

5 回答 5

4

听起来您在询问新的(自 PHP 7 起)null coalesce operator。您可以执行以下操作:

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

其中 if$_GET['bar']为 null 将设置$foohello.

从左到右的第一个操作数存在且不为 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

于 2015-11-11T21:00:05.057 回答
0

是的,你会这样做

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
于 2015-11-11T20:49:24.657 回答
0

像这样的东西:

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
于 2015-11-11T20:49:48.840 回答
0

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

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

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

于 2015-11-11T20:56:24.350 回答
0

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

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

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

于 2015-11-11T20:57:05.173 回答