在使用较短的三元运算符时:
$foo = isset($_GET['bar']) ?: 'hello';
如果设置了$_GET['bar']
,$foo
是否可以返回$_GET['bar']
而不是true
的值?
编辑:我理解老式的三元作品,例如
$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
但我想使用newschool三进制,它是更短的
这听起来像是在询问新的(从PHP7开始)null联合运算符。你可以做一些类似的事情:
$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
是的,你会像这个一样做
$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
类似这样的东西:
$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
我不确定我是否理解你的问题,但它是不是有点像:
$foo = isset($_GET['bar']) ? true : 'hello';
如果设置了该变量,这将为您提供一个(true),如果没有设置,则只提供hello。
答案是否定的(至少在PHP5中,请参阅chris对PHP7的回答)。出于这个原因,我倾向于使用辅助功能,例如
function isset_or(&$variable, $default = NULL)
{
return isset($variable) ? $variable : $default;
}
$foo = isset_or($_GET['bar'], 'hello');