在PHP中,我经常编写像
这样的行isset($foo)? NULL : $foo = 'bar'
在红宝石中有一个明亮的捷径,称为or equals
foo ||= 'bar'
PHP是否有这样的运算符,快捷方式或方法调用?我找不到一个,但我可能错过了它。
答案 0 :(得分:20)
从PHP7开始,您可以使用Null Coalesce Operator:
添加了coalesce或
??
运算符,如果它存在且不是NULL,则返回其第一个操作数的结果,否则返回其第二个操作数。
所以你可以写:
$foo = $foo ?? 'bar';
如果已设置且不为空,则会使用$foo
或将“bar”分配给$foo
。
在旁注中,您使用三元运算符给出的示例应该是:
$foo = isset($foo) ? $foo : 'bar';
三元操作不是if / else控制结构的简写,但应该用于根据第三个表达式选择两个表达式,而不是选择两个句子或执行路径 < / p>
答案 1 :(得分:8)
我真的很喜欢?:运算符。不幸的是,它还没有在我的生产环境中实现。所以,如果我要看看ruby-ish,我会选择类似的东西:
isset($foo) || $foo = 'bar';
或者,如果你想要它更短(更慢,并可能产生意想不到的结果):
@$foo || $foo = 'bar';
答案 2 :(得分:5)
您可以创建自己的功能:
function setIfNotSet(&$var, $value) {
if(!isset($var)) {
$var = $value;
}
}
答案 3 :(得分:5)
我发现它可读,简洁,高效:
isset($foo) or $foo = 'bar';
答案 4 :(得分:3)
从PHP 5.3开始,可以使用$foo ?: 'bar'
除非你认为$ foo是假的
[编辑]
算了。如果没有设置$ foo,它仍然会引发E_NOTICE。
答案 5 :(得分:2)
从手册:
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
虽然不完全一样。希望它无论如何都有帮助。
答案 6 :(得分:1)
答案 7 :(得分:1)
与红宝石最相似的是:
$foo or $foo = 'bar';
如果,$ foo为false
$foo = 0;
$foo = '0';
$foo = NULL;
$foo = '';
$foo = array();
$foo = FALSE;