PHP中的逻辑运算符和赋值运算符优先级.
P粉176980522
P粉176980522 2023-08-07 11:55:52
0
1
527
<p>最近我在一则这样的段落中发现了它:</p> <pre class="brush:php;toolbar:false;">$x = 2 && $y = 3; echo (int)$x.':'.(int)$y;</pre> <p>该代码片段生产输出 1:3。通过查看运算符优先级表,我发现逻辑运算符||和&&具有比赋值运算符=更高的优先级。因此,第一个表达式应该被视为$x = ($y || 2) = 3;这使得$x = (2 && $y) = 3;,最后评估为$x = false = 3;。其次,赋值运算符具有右置序性,所以解释器应该尝试执行false = 3,这是显然非法的。所以,在我看来,上述提到的代码片段应该无法编译,并且应该抛出解析或运行时错误。但是,相反,该代码片段却生产了1:3。这意味着解释器执行的操作是:</p> <blockquote> <p>a) $y=3</p> <p>b) 2 && $y</p> <p>c) $x = (2 && $y)</p> </blockquote> <p>为什么这样做而不是根据操作符优先级?</p>
P粉176980522
P粉176980522

全部回复(1)
P粉615829742

您提供的运算符优先级表格中作为一个单独的注释指出:

因此,实际上,在表达式中的赋值将被视为一个子表达式。具体的处理方式和时间并没有在文档中明确说明,文档只是指出“类似”的表达式会以这种方式工作。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!