V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iac
V2EX  ›  PHP

关于 PHP 执行顺序

  •  
  •   iac · 2017-09-27 17:05:25 +08:00 · 3468 次点击
    这是一个创建于 2647 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // line1
    true && $a = 33;
    echo $a;
    
    unset($a);
    // line2
    $a = 33 && true;
    echo $a;
    

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

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

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

    (一般正常的做法是遵循优先级,让程序员自己加括号)
    shooyaaa
        4
    shooyaaa  
       2017-09-27 18:41:58 +08:00
    line1 应该是在词法分析的时候=左边必须是变量,如果按照优先级执行,就是出现 false = 3 语法错误
    gdtv
        5
    gdtv  
       2017-09-27 18:53:45 +08:00 via Android   ❤️ 1
    为什么要这样写?除了装 B 没什么意义。正确的做法是加括号消歧义。
    iyaozhen
        6
    iyaozhen  
       2017-09-27 18:57:59 +08:00 via Android
    @iac 90%的问题在 PHP 文档里面能找到答案,剩下的 10%在鸟哥的博客里
    linxl
        7
    linxl  
       2017-09-28 10:17:52 +08:00
    为啥这么难为人, 我稍有歧义的都会加括号来明确优先级...
    iamfirst
        8
    iamfirst  
       2017-10-03 05:27:58 +08:00 via Android
    目测很多笔试装逼题就喜欢这么虐人,看到这种公司直接问面试官,公司喜欢这么写代码的吗?然后直接拒绝面试走人
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:18 · PVG 04:18 · LAX 12:18 · JFK 15:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.