PHP 三元运算心得

评论(10)

逛一些 WordPress 、PHP 、Javascript 、Jquery 、CSS 等等的爱好者的博客一直都是我的小爱好,因为能从中学到很多东西,今天也不例外,逛到 @phoetry 的博客,看到他写的关于 PHP 三元运算的解惑文章,分析的透彻易懂,因为在这个方面我也一直疑惑着,所以不免心动转之,希望广而告之,为同样疑惑在 PHP 三元运算上得童鞋们小解一把惑。

不敢无视版权及一些蛋疼的共享协议等问题,给出链接原文地址: 《PHP三元运算符的结合性》

PHP 三元运算 定义、翻译、例子

贴士:PHP 三元运算 即
$X = CONDITION ? VALUE IF TRUE : VALUE IF FALSE
翻译成中文就是:
变量 = 条件? 值1(如果条件为真) : 值2(如果条件为假)
例子:
$x = 1<2 ? "XiangZi" :"PangBu" ; 结果: $x = "XiangZi" $x = 1>2 ? “XiangZi” :”PangBu” ;
结果: $x = “PangBu”

亲,明白了呗?

PHP 三元运算实战(打真军,嘿嘿)

下面把他复杂化一点

<?php
    $a=1;$b=2;$c=3;$d=4;
    echo $a<$b?'xx':$a<$c?'yy':$a<$d?'zz':'oo';
?>


一般按照其它语言(比如C或Java)的规则, 以上代码的运算逻辑是:
$a<$b => true => ‘xx’ ==> 结束
那么最后得到的结果就是’xx’, 而再往后的运算都会被无视.
注:没有看到 @phoetry 君的文章时,我真他娘的是这么以为的,
经测试竟然显示zz。
Why ? DanTeng ?
求教谷歌酱, 结果被告知php的三元运算竟然是向左结合的…
给上面的代码加上两个括号方便理解:

<?php
    $a=1;$b=2;$c=3;$d=4;
    echo (($a<$b?'xx':$a<$c)?'yy':$a<$d)?'zz':'oo';
//$a<$b => true => 'xx' => true => 'yy' => true => 'zz' => 结束
?>


用括号改为向右结合:

    $a=1;$b=2;$c=3;$d=4;
    echo $a<$b?'xx':($a<$c?'yy':($a<$d?'zz':'oo'));
    // 括号换下位置就行了,显示插插,哦不对是xx,哈哈!

总结 (结束战斗)

个人感觉,如果你刚开始接触编程神马的,你可以这样理解,
php中三元运算的时候 会强制执行每一个“?”
并且“?”会把左侧所有的值都做一次判断
这样就好理解为什么会走到最后一个判断。
你是不是这么理解我不知道,反正我是这么理解了。





转载请注明转自: PHP 三元运算心得

  1. @johnny-zhang
    看上面的括号理解

  2. 不好理解 echo $a$c?’yy’:$a>$d?’zz’:’oo’;偶改写了上面的代码,输出仍然是ZZ。如果最后一个?的条件改为假,那么输出为OO。可以这么理解:三元运算的值取决于最后一个?

  3. 我一般尽量用单个“?”,多了就加括号,比较好阅读,不然把自己写的代码搞晕就囧了

  4. @卢松松
    尊重原著,哈哈。

  5. 原文地址你可以放到网页最下面嘛,不然影响美观

  6. 和其他语言也差不多,呵呵

  7. 复杂一点就是多个判断加到一起,看起来就复杂了

  8. 慢慢来,我之前看这个也是一头雾水。

  9. 梦璃博客 :专业人士才懂的,我就不懂了。

    同感,呵呵

  10. 专业人士才懂的,我就不懂了。