PHP相当于Ruby的or-equals(foo || = bar)?
在PHP中,我经常写类似的行
isset($foo)? NULL : $foo = 'bar'
在ruby中有一个明亮的捷径,叫做或等于
foo ||= 'bar'
PHP有这样的运算符,快捷方式或方法调用吗? 我找不到一个,但我可能错过了它。
从PHP7开始,您可以使用Null Coalesce Operator :
合并,或
??
,添加运算符,如果存在且不是NULL,则返回其第一个操作数的结果,否则返回其第二个操作数。
所以你可以写:
$foo = $foo ?? 'bar';
并且它将使用$foo
如果它已设置且不为null或将“bar”分配给$foo
。
在旁注中,您使用三元运算符给出的示例应该如下:
$foo = isset($foo) ? $foo : 'bar';
三元操作不是简写if / else控制结构,但它应该用于根据第三个表达式在两个表达式之间进行选择,而不是选择两个句子或执行路径
我真的很喜欢?:运算符。 不幸的是,它还没有在我的生产环境中实现。 所以,如果我要看起来像ruby-ish,我会选择以下内容:
isset($foo) || $foo = 'bar';
或者,如果您希望它更短(更慢,并可能产生意外结果):
@$foo || $foo = 'bar';
您可以创建自己的function:
function setIfNotSet(&$var, $value) { if(!isset($var)) { $var = $value; } }
我发现它具有可读性,简洁性和高性能:
isset($foo) or $foo = 'bar';
从PHP 5.3开始,可以使用$foo ?: 'bar'
除非你认为$ foo是假的
[编辑]
算了吧。 如果没有设置$ foo,它仍然会引发E_NOTICE。
从手册:
从PHP 5.3开始,可以省略三元运算符的中间部分。 表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
但它并不完全相同。 无论如何希望它有所帮助。
没有。 根据w3schools ,该运营商不存在。
此外,您发布的PHP代码相当神秘。 我更喜欢这样的东西:
if (!isset($foo)) $foo = 'bar';
与ruby最相似的是:
$foo or $foo = 'bar';
如果$ foo是假的
$foo = 0; $foo = '0'; $foo = NULL; $foo = ''; $foo = array(); $foo = FALSE;