当前位置: 首页 > 知识库问答 >
问题:

PHP中逻辑vs赋值操作符优先级

壤驷彦
2023-03-14

最近我发现了这样一个片段:

$x = 2 && $y = 3; echo (int)$x.':'.(int)$y;

它产生输出1:3。通过查看运算符优先级表,我看到逻辑运算符||

a) $y=3

b) 二,

c) $x=(2)

为什么是这样,而不是根据运算符优先级?


共有1个答案

哈朗
2023-03-14

作为单独注释链接到状态的运算符优先级表:

虽然=的优先级低于大多数其他运算符,但是PHP仍然允许类似于以下的表达式:if(!$a=foo()),在这种情况下,foo()的返回值被放入$a中。

因此,实际上,表达式中的赋值将被视为子表达式。从留档中还不清楚这将如何以及何时发生,它只是指出“类似”的表达式将以这种方式工作。

 类似资料:
  • 为什么JVM不遵守它自己的规则。以下面的例子为例。 结果是: 而实际结果应该是,根据&运算符是在运算符之前求值的事实: 对于为什么没有正确实现这一点,有一些解释会很好。即使在第二部分周围添加括号,也没有使用正确的优先级。

  • C++中有三种逻辑操作符:与,或,取反,分别用符号&&,||和!表示。这些操作符的语义与它们的字面意思类似。例如 x > 0 && x < 10 为真,当且仅当x大于0且小于10的时候成立。 evenFlag || n%3 == 0,当两个条件中的任一个为真时,表达式为真,即evenFlag为真或n可以被3整除时。 取反操作符的作用是为布尔表达式求反, !evenFlag这个表达式当evenFl

  • 简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量,如下面的例子所示: var num = 10; 如果在等于号(=)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。 这种复合赋值操作相当于是对下面常规表达式的简写形式: var num = 10; num = num + 10; 其中的第二行代码可以用一个复合赋值来代替: var num = 10; num

  • 问题内容: 下面的两个语句是否等效? 和 我可以使用某种真值表来验证这一点吗? 问题答案: 优先于,因此,即使 与…不同 因为那将被执行为 并且想要使它们相同的是以下内容(使用括号覆盖优先级规则): 这是一个示例说明:

  • 问题内容: 下面的两个语句是否等效? 和 我可以使用某种真值表来验证这一点吗? 问题答案: 优先于,因此,即使 与…不同 因为那将被执行为 并且想要使它们相同,是以下内容(使用括号覆盖优先级规则): 这是一个示例说明:

  • 本文向大家介绍oracle逻辑运算符与其优先级简介,包括了oracle逻辑运算符与其优先级简介的使用技巧和注意事项,需要的朋友参考一下 Oracle的逻辑运算符也是用在SQL语句中必不可少的因素,一共有三个 逻辑运算符 意义 and 双值运算符,如果左右两个条件都为真,则得到的值就为真 or 双值运算符,只要左右两个条件有一个为真,则得到的值就为真 not 单指运算符,如果原条件为真,则得到真,如