今天在开发中无意间发现一个很奇怪的运算符优先级问题,不知道PHP是怎么设计的这个,出的结果让我很是费解,发上来让大家活动活动脑子。 $x  = 2;
 echo $x == 2 ? '我' : $x==1 ? '你' : '它';就这么一个普通的3目运算,有些同学想都不想就告诉我,答案是“我”这个问题我测了一下只出在PHP里,答案居然是“你”,有没有达人能解释一下PHP的3目算术优先级问题?大家探讨一下,要是很简单只能说明我笨了,呵呵

解决方案 »

  1.   

    我的想法只能是
    echo   ( $x   ==   2   ?   '我 '   :   $x==1  )  ?   '你 '   :   '它 '; 
    这么运行的
      

  2.   

    ...这个是 他直接的.
    if($x==2){
    echo '我';
    }else{
      if($x==1){
        echo '你';
      }else{
        echo '它';
      }
    }
      

  3.   

    1楼的理解是正确的,echo  ( $x  ==  2  ?  '我 '  :  $x==1  )作为三元判断条件,仔细看下面详细输出就明白了.$x = 2; 
    //测试开始
    echo $x ==  2;   // 输出:1
    echo $x ==  2 ? '我 ' : $x==1 ?'你': '它 ';  // 输出:你
    echo $x ==  3 ? '我 ' : $x==1 ?'你': '它 ';  //输出:它 
    echo $x ==  1 ? '我 ' : $x==1 ?'你': '它 ';  //输出:它
    //测试结束echo $x ==  2 ? '我 ' : $x==1 ?'你': '它 ';  // 红色条件为真输出前者:你
    echo $x ==  1 ? '我 ' : $x==1 ?'你': '它 ';  //红色条件为假输出后者:它
      

  4.   

    echo $x ==  2 ? '我 ' : $x==1 ?'你': '它 ';  // 红色条件为真输出前者:你 
    echo $x ==  1 ? '我 ' : $x==1 ?'你': '它 ';  //红色条件为假输出后者:它 
      

  5.   

    明白了,三目运算的规则是自右向左,a?b:c?d:e;等价于(a?b:c)?d:e;
    而不是a?b:(c?d:e);
      

  6.   

    代码要是能写成这样  $x     =   2; 
      echo   $x   ==   2   ?   '我 '   :   $x==1   ?   '你 '   :   '它 '; 那也真是奇葩了.除了娱乐,真的不知道还有什么意义