关于 PHP 执行顺序

2017-09-27 17:05:25 +08:00
 iac
// line1
true && $a = 33;
echo $a;

unset($a);
// line2
$a = 33 && true;
echo $a;

为什么 line1 的执行结果是 33,根据 php 运算符优先级 line1 不是应该等于(true && $a) = 33 ?

为什么 line2 的执行结果是 1 ?

3421 次点击
所在节点    PHP
8 条回复
demoxu
2017-09-27 17:08:35 +08:00
赋值运算在 PHP 的优先级应该是最低一档的了;所以第二个是$a= ( 33&&true );$a=true;
iac
2017-09-27 17:20:53 +08:00
突突突找了一圈
终于找到一个比较规范的说明了
http://www.laruence.com/2010/07/26/1668.html
fcten
2017-09-27 17:36:19 +08:00
2 是正常的优先级。1 是特例。虽然我不知道 php 为什么这样做,但我知道这么写代码会被打……

(一般正常的做法是遵循优先级,让程序员自己加括号)
shooyaaa
2017-09-27 18:41:58 +08:00
line1 应该是在词法分析的时候=左边必须是变量,如果按照优先级执行,就是出现 false = 3 语法错误
gdtv
2017-09-27 18:53:45 +08:00
为什么要这样写?除了装 B 没什么意义。正确的做法是加括号消歧义。
iyaozhen
2017-09-27 18:57:59 +08:00
@iac 90%的问题在 PHP 文档里面能找到答案,剩下的 10%在鸟哥的博客里
linxl
2017-09-28 10:17:52 +08:00
为啥这么难为人, 我稍有歧义的都会加括号来明确优先级...
iamfirst
2017-10-03 05:27:58 +08:00
目测很多笔试装逼题就喜欢这么虐人,看到这种公司直接问面试官,公司喜欢这么写代码的吗?然后直接拒绝面试走人

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/394100

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX