PHP 等同于 Ruby 的 or-equals (foo ||=酒吧)?

2022-08-30 17:37:56

在 PHP 中,我经常写像

isset($foo)? NULL : $foo = 'bar'

在 ruby 中,有一个很棒的快捷方式,称为或等于

foo ||= 'bar'

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


答案 1

从 PHP7 开始,您可以使用 Null 合并运算符

添加合并或 运算符,如果合并运算符存在且不为 NULL,则返回其第一个操作数的结果,否则返回其第二个操作数的结果。??

所以你可以写:

$foo = $foo ?? 'bar';

如果它被设置而不是空,它将使用或将“bar”分配给。$foo$foo

顺便说一句,您给出的三元运算符示例实际上应该如下所示:

$foo = isset($foo) ? $foo : 'bar';

三元运算不是速记 if/else 控制结构,但它应该用于根据第三个表达式在两个表达式之间进行选择,而不是选择两个句子或执行路径


答案 2

我真的很喜欢?:运算符。遗憾的是,它尚未在我的生产环境中实现。所以,如果我要让它看起来像红宝石一样,我会选择这样的东西:

isset($foo) || $foo = 'bar';

或者,如果您希望它更短(更慢,并且可能会产生意外结果):

@$foo || $foo = 'bar';

推荐