提问人:Magnar Myrtveit 提问时间:8/13/2015 最后编辑:Dave FMagnar Myrtveit 更新时间:4/18/2018 访问量:446
PHP 中的逻辑赋值运算符
Logical assignment operator in PHP
问:
PHP中似乎没有逻辑赋值运算符。我希望能够写成.$a = $a || $b
$a ||= $b
请注意,这与 不同,后者在计算结果为 时不会短路。$a |= $b
$a
true
PHP中有这样的功能吗?
答:
0赞
Dave F
4/16/2018
#1
PHP 似乎没有这个功能。Assignment Operator 文档或 Logical Operators 文档中没有任何内容提及此功能。此外,它不包括在“分配运算符”页面上评分最高的评论中,该评论是某人根据其他页面中的信息编译的所有分配运算符的列表。
评论
0赞
Magnar Myrtveit
4/16/2018
这并不能回答这个问题。我问的是一个逻辑赋值运算符,短路:和 .$A = true; $A ||= ThisFunctionIsShortCircuitedAndWillNotBeExecuted()
$B = false; $B &&= ThisFunctionIsShortCircuitedAndWillNotBeExecuted()
0赞
Dave F
4/17/2018
我错过了关于短路的部分,并相应地编辑了答案。
0赞
Dave F
4/17/2018
维基百科将 Zend Technologies 列为 PHP 的开发者,所以我给他们发了一封电子邮件,询问是否存在逻辑赋值运算符,或者他们是否计划实现它们。如果我得到回答问题的回复,我会把它包含在我的答案中,因为我想要某种明确的回复,我想把它张贴在某个地方。
0赞
Magnar Myrtveit
4/17/2018
感谢您的输入,@DaveF。我不是那个对你的答案投反对票的人,所以我不能删除它。当我 2,5 岁的问题得到答案时,我实际上有点惊讶,当我看到它时,它已经投了反对票。
0赞
Dave F
4/17/2018
谢谢你让我知道。在您做出回应之后,在发布任何其他答案之前,投了反对票。
1赞
Xorifelse
4/17/2018
#2
PHP 中没有 or 运算符,有些语言使用它(例如 ruby),但它们的实现方式不同。||=
&&=
所以唯一的方法是这样的:
$a = $b || $c;
您也可以使用运算符,这意味着如果然后使用。??
isset
$a = $b ?? $c;
或者将值链接到它并使用最后一个值作为默认值(如果前一个值的计算结果均为 true):
$a = $b ?? $c ?? true;
逻辑赋值运算符只允许您存储一个 or 值,并且大多数情况下,您可以直接将其直接放在 if 语句中(并可选择设置)以保存一行代码。true
false
评论
$a ||= $b
$a = $a || $b
$a = ($a == 'test' ? $c:$b);