PHP中的逻辑赋值运算符
Posted
技术标签:
【中文标题】PHP中的逻辑赋值运算符【英文标题】:Logical assignment operator in PHP 【发布时间】:2015-11-06 06:50:46 【问题描述】:php 中似乎没有逻辑赋值运算符。我希望能够将$a = $a || $b
写成$a ||= $b
。
请注意,这与 $a |= $b
不同,$a
计算结果为 true
时不会短路。
PHP中有这样的功能吗?
【问题讨论】:
$a ||= $b
应该怎么做? $a = $a || $b
?!
这就是我想要的,是的!
这对逻辑运算符没有多大意义。
为什么不呢?请详细说明一下好吗?
【参考方案1】:
PHP 中没有 ||=
或 &&=
运算符,有些语言使用它(例如 ruby),但它们的实现方式不同。
所以唯一的办法就是这样:
$a = $b || $c;
也可以使用??
操作符,表示如果isset
那么使用。
$a = $b ?? $c;
或者将值链接到它并使用最后一个作为默认值(如果前面没有一个评估为真):
$a = $b ?? $c ?? true;
逻辑赋值运算符仅允许您存储true
或false
值,并且大多数情况下,您可以直接将其放入(并可选择设置)到 if 语句中以节省一行代码。
【讨论】:
【参考方案2】:PHP 似乎没有这个功能。 Assignment Operator documentation 或 Logical Operators documentation 中没有任何内容提及此功能。此外,它不包含在 top rated comment on the Assignment Operator page 中,这是某人根据其他页面中的信息编译的所有赋值运算符的列表。
【讨论】:
这没有回答问题。我在问一个逻辑赋值运算符,短路:$A = true; $A ||= ThisFunctionIsShortCircuitedAndWillNotBeExecuted()
和 $B = false; $B &&= ThisFunctionIsShortCircuitedAndWillNotBeExecuted()
。
我错过了关于短路的部分并相应地编辑了答案。
***将 Zend Technologies 列为 PHP 的开发者,所以我给他们发了一封电子邮件,询问是否存在逻辑赋值运算符,或者他们是否计划实现它们。如果我得到回答问题的回复,我会将其包含在我的答案中,因为我想要某种明确的回复,并且希望将其发布在某个地方。
感谢您的意见,@DaveF。我不是对您的答案投反对票的人,因此我无法将其删除。当我 2.5 年前的问题得到答案时,我实际上有点惊讶,而且当我看到它时,它已经被否决了。
感谢您告诉我。在您回复之后且在发布任何其他答案之前投了反对票。以上是关于PHP中的逻辑赋值运算符的主要内容,如果未能解决你的问题,请参考以下文章