Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP三元速记运算符中使用isset()时获取变量的值_Php_Syntax_Operators_Ternary Operator_Php 7 - Fatal编程技术网

在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'虽然这看起来是“直接的”