// line1 true && $a = 33; echo $a; unset($a); // line2 $a = 33 && true; echo $a;
为什么 line1 的执行结果是 33,根据 php 运算符优先级 line1 不是应该等于(true && $a) = 33
?
为什么 line2 的执行结果是 1 ?
1 demoxu 2017-09-27 17:08:35 +08:00 赋值运算在 PHP 的优先级应该是最低一档的了;所以第二个是$a= ( 33&&true );$a=true; |
![]() | 2 iac OP |
![]() | 3 fcten 2017-09-27 17:36:19 +08:00 2 是正常的优先级。1 是特例。虽然我不知道 php 为什么这样做,但我知道这么写代码会被打…… (一般正常的做法是遵循优先级,让程序员自己加括号) |
4 shooyaaa 2017-09-27 18:41:58 +08:00 line1 应该是在词法分析的时候=左边必须是变量,如果按照优先级执行,就是出现 false = 3 语法错误 |
5 gdtv 2017-09-27 18:53:45 +08:00 via Android ![]() 为什么要这样写?除了装 B 没什么意义。正确的做法是加括号消歧义。 |
7 linxl 2017-09-28 10:17:52 +08:00 为啥这么难为人, 我稍有歧义的都会加括号来明确优先级... |
![]() | 8 iamfirst 2017-10-03 05:27:58 +08:00 via Android 目测很多笔试装逼题就喜欢这么虐人,看到这种公司直接问面试官,公司喜欢这么写代码的吗?然后直接拒绝面试走人 |