PHP相当于Ruby的or-equals(foo || = bar)?

时间:2010-07-29 12:53:36

标签: php ruby operators

在PHP中,我经常编写像

这样的行
isset($foo)? NULL : $foo = 'bar'

在红宝石中有一个明亮的捷径,称为or equals

foo ||= 'bar'

PHP是否有这样的运算符,快捷方式或方法调用?我找不到一个,但我可能错过了它。

8 个答案:

答案 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)

没有。 According to w3schools,该运算符不存在。

此外,您发布的PHP代码相当神秘。我更喜欢这样的东西:

if (!isset($foo)) $foo = 'bar';

答案 7 :(得分:1)

与红宝石最相似的是:

$foo or $foo = 'bar';
如果

$ foo为false

$foo = 0;
$foo = '0';
$foo = NULL;
$foo = '';
$foo = array();
$foo = FALSE;