PHP中是否有类似JavaScript中的"Guard"运算符

14

我喜欢用JavaScript实现以下操作:

function (a, b, c) {
    var foo = a || b || c;
    return foo.bar;
}

有没有一种快速的方法可以使用回退来进行赋值,或者这需要一个自定义的函数

1个回答

21

PHP 5.3 引入了 ?: 运算符(不要与三元条件运算符混淆,想想也知道)。我不使用 PHP,但我想它应该是这样的:

 $foo = $a ?: $b ?: $c

请参考:http://php.net/manual/zh/language.operators.comparison.php

自 PHP 5.3 起,可以省略三元运算符的中间部分。表达式 expr1 ?: expr3 如果 expr1 的值为 TRUE,则返回 expr1,否则返回 expr3。

祝编码愉快。


1
不确定你的第一句话是什么意思。此外,由于使用等号进行比较,例如a=false,b=0,c=1将返回1,因此此方法的使用受到限制。还要注意它将返回表达式的结果,因此当data[a]被设置时,isset(data[a]) ?: 'bar'将返回true;而你可能期望它返回data[a]的值。顺便说一下,手册建议不要堆叠三元运算符。 - Gordon
@Gordon 确实...在 PHP 中,它被混合为“特殊三元条件语法”。我猜我只是习惯了它被称为“或”或类似的东西。至于返回表达式结果--这就是它添加的长期缺失功能;-) 我猜,a ?: b可以看作是a ? a : b的“快捷语法”,避免了对a的两次评估。我不知道?:的其他怪癖会如何影响它。嵌套不是问题,因为它是一个二元运算符(而不是像另一种形式那样的三元运算符),所以不存在关于意图和语法的歧义。 - user166390

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接