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;

逻辑赋值运算符仅允许您存储truefalse 值,并且大多数情况下,您可以直接将其放入(并可选择设置)到 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中的逻辑赋值运算符的主要内容,如果未能解决你的问题,请参考以下文章

python3.5中的赋值运算符和逻辑运算符

PHP 中的引用赋值运算符 =&

为啥 ~= 在 C++ 中缺少唯一的非逻辑赋值运算符? [关闭]

PHP中的赋值运算符

php语法基础3

PHP运算符:算数运算符逻辑运算符三目运算符位运算符字符串运算符。