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

Posted

技术标签:

【中文标题】PHP三元速记运算符中使用isset()时获取变量值【英文标题】:Get value of variable when isset() is used in PHP ternary shorthand operator 【发布时间】:2016-02-13 01:46:20 【问题描述】:

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

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

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

编辑:我理解老派三元的作品,例如,

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

但我想使用更短版本的 newschool 三元组

【问题讨论】:

有趣的是,很少有答案与您的示例相同 【参考方案1】:

听起来您在询问新的(自 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

【讨论】:

是的,可能就是这样,但是这个新的运算符不再需要isset() 了吗?意思是,如果没有设置$_GET['bar'],它不会返回警告? 根据此文档,不会发出通知,The coalesce, or ??, operator is added, which returns the result of its first operand if it exists and is not NULL, or else its second operand. This means the $_GET['mykey'] ?? "" is completely safe and will not raise an E_NOTICE.。 wiki.php.net/rfc/isset_ternary 所以不需要isset。如果您需要它来处理较旧的 PHP 部署,但它不会。 谢谢,现在,我想出了一个让它工作的方法 $foo = filter_input(INPUT_GET, 'bar) ?: 'hello'; 虽然这看起来很“普通”【参考方案2】:

是的,你会这样做

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

【讨论】:

好吧,但这不再是速记了 是的,这就是这个条件运算符的工作方式。 if true 值放在冒号之前,if false 放在冒号之后。【参考方案3】:

类似这样的:

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

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

function isset_or(&$variable, $default = NULL)

    return isset($variable) ? $variable : $default;

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

【讨论】:

以上是关于PHP三元速记运算符中使用isset()时获取变量值的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 速记三元运算符

PHP三元运算符 isset的理解

使用三元运算符在 php-isset 中使用函数

php 三元和速记PHP

isset() 的 PHP 简写? [复制]

python学习第十九天三元运算符与php语言区别