在PHP三元速记运算符中使用isset()时获取变量的值
在使用较短的三元运算符时:在PHP三元速记运算符中使用isset()时获取变量的值,php,syntax,operators,ternary-operator,php-7,Php,Syntax,Operators,Ternary Operator,Php 7,在使用较短的三元运算符时: $foo=isset($\u GET['bar'])?:'hello' 如果设置了$\u GET['bar'],$foo是否可以返回$\u GET['bar']的值,而不是true 编辑:我了解老式的三元作品,例如 $foo=isset($\u GET['bar'])$_获取['bar']:'hello' 但是我想用newschool三元,它是更短的版本是的,你会这样做的 $foo = isset($_GET['bar']) ? $_GET['bar'] : 'hel
$foo=isset($\u GET['bar'])?:'hello'代码>
如果设置了$\u GET['bar']
,$foo
是否可以返回$\u GET['bar']
的值,而不是true
编辑:我了解老式的三元作品,例如
$foo=isset($\u GET['bar'])$_获取['bar']:'hello'代码>
但是我想用newschool三元,它是更短的版本是的,你会这样做的
$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
大概是这样的:
$foo = isset($_GET['bar']) ? $_GET['bar'] : 'hello';
我不确定我是否理解你的问题,但它是否类似于:
$foo = isset($_GET['bar']) ? true : 'hello';
$foo = $_GET['bar'] ?? 'hello';
echo $foo;
如果设置了该变量,则给出一个(true),如果未设置,则给出hello。答案为否(至少在PHP5中,请参见chris关于PHP7的答案)。因此,我倾向于使用辅助函数,例如
function isset_or(&$variable, $default = NULL)
{
return isset($variable) ? $variable : $default;
}
$foo=isset\u或($\u GET['bar'],'hello')代码>听起来像是在询问新版本(从PHP7开始)。您可以执行以下操作:
$foo = isset($_GET['bar']) ? true : 'hello';
$foo = $_GET['bar'] ?? 'hello';
echo $foo;
如果$\u GET['bar']
为空,则将$foo
设置为hello
从左到右存在且不为空的第一个操作数。如果未定义值且不为NULL,则为NULL。从PHP7开始提供
功能演示:
输出:
hello
good bye
附加阅读:好吧,是的,但这不再是速记了是的,这就是这个条件运算符的工作原理。if true值在冒号之前,if false值在冒号之后。有趣的是,与您的示例相同的答案非常少。是的,可能就是这样,但是这个新操作符不再需要isset()
?这意味着,如果未设置$\u GET['bar']
,它将不会返回警告?根据本文档,不会抛出任何通知,添加了coalesce或???运算符,如果第一个操作数存在且不为空,则返回其结果,否则返回其第二个操作数。这意味着$u GET['mykey']??“”是完全安全的,不会引起紧急通知。
。因此不需要isset
。如果您需要它来在旧的PHP部署上工作,尽管它不会。谢谢,现在,我找到了一种方法使它工作$foo=filter\u input(input\u GET,'bar)?:'hello'代码>虽然这看起来是“直接的”