PHP 中的逻辑赋值运算符

Logical assignment operator in PHP

提问人:Magnar Myrtveit 提问时间:8/13/2015 最后编辑:Dave FMagnar Myrtveit 更新时间:4/18/2018 访问量:446

问:

PHP中似乎没有逻辑赋值运算符。我希望能够写成.$a = $a || $b$a ||= $b

请注意,这与 不同,后者在计算结果为 时不会短路。$a |= $b$atrue

PHP中有这样的功能吗?

php 逻辑运 赋值运算符 短路 ruby

评论

0赞 Rizier123 8/13/2015
应该怎么做? ?!$a ||= $b$a = $a || $b
0赞 Magnar Myrtveit 8/13/2015
这就是我想要的,是的!
0赞 Rizier123 8/13/2015
对于逻辑运算符来说,这没有多大意义。
0赞 Magnar Myrtveit 8/13/2015
为什么不呢?你能详细说明一下吗?
0赞 Jacques Koekemoer 8/13/2015
您是否在寻找这样的东西,如果 $a === 'test' 那么 $a 将获得 $c 的值,$a获得 $b 的值?$a = ($a == 'test' ? $c:$b);

答:

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 运算符,有些语言使用它(例如 ),但它们的实现方式不同。||=&&=

所以唯一的方法是这样的:

$a = $b || $c;

您也可以使用运算符,这意味着如果然后使用。??isset

$a = $b ?? $c;

或者将值链接到它并使用最后一个值作为默认值(如果前一个值的计算结果均为 true):

$a = $b ?? $c ?? true;

逻辑赋值运算符只允许您存储一个 or 值,并且大多数情况下,您可以直接将其直接放在 if 语句中(并可选择设置)以保存一行代码。truefalse