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()时获取变量值的主要内容,如果未能解决你的问题,请参考以下文章