hoythan
V2EX  ›  PHP

PHP IF 简写怎么写多个条件

  •  
  •   hoythan · Feb 16, 2017 · 5197 views
    This topic created in 3418 days ago, the information mentioned may be changed or developed.

    比如

    $id = $name != '' ? $key : (is_numeric($key) ? $key : '');
    
    

    歌词大意

    如果 $name  != '' $id  等于 $key  否则
    如果 $key  是数字, $id  等于  $key,否则 $id  等于空
    
    37 replies    2017-03-26 14:41:13 +08:00
    hoythan
        1
    hoythan  
    OP
       Feb 16, 2017
    小括号是我瞎编的,我不知怎么连续写.
    zhaohehe
        2
    zhaohehe  
       Feb 16, 2017
    @hoythan 就是小括号 但是不是很推荐吧 读起来有点费劲 😆
    shiny
        3
    shiny  
    PRO
       Feb 16, 2017
    这种情况慎用三元运算符
    ALeo
        4
    ALeo  
       Feb 16, 2017
    这种三目表达式 写那么复杂干嘛呢。。

    其实也就是

    ··
    $id = $name != '' && is_numeric($key) ? $key : '';

    就可以了。
    allenhu
        5
    allenhu  
       Feb 16, 2017
    拖出去剁了
    wclssdn
        6
    wclssdn  
       Feb 16, 2017
    你这么写你自己看的懂么?看你代码的其他人看的懂么?
    如果你想看着简介(简短,易懂),可以看看这段:
    $id = '';
    $name && is_numeric($key) && $id = $key; // 如果 name 不为空,并且 key 是数字,则 id=key
    nilai
        7
    nilai  
       Feb 16, 2017
    @ALeo 真相帝。
    hoythan
        8
    hoythan  
    OP
       Feb 16, 2017
    @zhaohehe
    @shiny
    我觉得外国佬都是这么写的.
    hoythan
        9
    hoythan  
    OP
       Feb 16, 2017
    @ALeo 666 我思路太死板了.
    Mitt
        10
    Mitt  
       Feb 16, 2017
    如果是三元的话 可以 exp ? ret1 : exp2 ? ret2 : exp3 ? ret3 : exp4 ? ret4 : ret5 ; 这种一直续下去的,当然你的代码更适合上面大神们说的 && 和 || 来解决问题, 我建议如果不是简单三目的话 宁可多写几行代码也不要用三目偷懒,因为对可读性是相对比较差的
    hoythan
        11
    hoythan  
    OP
       Feb 16, 2017
    @ALeo 你写错了
    ```
    $id = $name == '' && is_numeric($key) ? $key : '';
    ```
    $name 要 == '' 才行.
    shiny
        12
    shiny  
    PRO
       Feb 16, 2017
    @hoythan 不知道你遇到过,维护自己几年前的代码时候想抽自己。
    hoythan
        13
    hoythan  
    OP
       Feb 16, 2017
    @shiny ...维护确实有点麻烦,但是我觉得照常写很 Low?
    shiny
        14
    shiny  
    PRO
       Feb 16, 2017
    @hoythan 看目的:只是为了酷炫,爱怎么写怎么写;如果需要维护很多年,可读性是第一位的。

    想要代码漂漂亮亮,我个人倒建议可以试试其他某些语言,比如 Ruby 。
    xzem
        15
    xzem  
       Feb 16, 2017 via Android
    @Mitt php 的三目不能这么些,你这么些不管前面是否为真都会一直执行到最后一个三目表达式
    l12ab
        16
    l12ab  
       Feb 16, 2017
    这种情况我宁愿多写几个 if else ,看起来舒服些
    realpg
        17
    realpg  
    PRO
       Feb 16, 2017
    @hoythan #13
    敢这么写一次的员工我都开除了……
    仅供参考
    Mitt
        18
    Mitt  
       Feb 16, 2017
    @xzem 那就加个括号 2333 一般不会写那么多 超过两层判断就直接上 if else 了
    abugs
        19
    abugs  
       Feb 16, 2017
    三元一般够用,如果你有多个 if ,建议使用常规 if else
    konakona
        20
    konakona  
       Feb 16, 2017
    这个可以的,这样写没有问题,能阅读。只是容易不小心写错。
    wizardoz
        21
    wizardoz  
       Feb 16, 2017
    写多个条件就不是简写了
    lh900519
        22
    lh900519  
       Feb 16, 2017 via Android
    @ALeo 不是应该用 || ?
    keinx
        23
    keinx  
       Feb 16, 2017
    你入错行了,来 Python ,人生苦短我用 python
    hoythan
        24
    hoythan  
    OP
       Feb 16, 2017
    @realpg
    @abugs
    @l12ab
    我的错,是我一时蒙蔽了自己的心智.以后再用打断自己手.
    Reign
        25
    Reign  
       Feb 16, 2017
    这年头,为了装逼也是蛮拼的
    cxbig
        26
    cxbig  
       Feb 17, 2017
    你见哪个外国人这么写赶快拉黑
    Ternary Operator 嵌套不符合 Best Practice 原则。他人很难看清楚逻辑结构
    在我们公司,写成这样绝对过不了代码审查
    写成一行也不代表跑起来就快
    flydogs
        27
    flydogs  
       Feb 17, 2017
    老老实实 if else
    juice
        28
    juice  
       Feb 17, 2017
    代码优先给人读,次之再给机器读
    killerv
        29
    killerv  
       Feb 17, 2017
    代码可读性很重要
    hoythan
        30
    hoythan  
    OP
       Feb 17, 2017
    @cxbig wordpress 程序中有大量的简写...
    v2dead
        31
    v2dead  
       Feb 17, 2017
    wordpress 出了名的烂代码,背了那么多年的历史包袱,你居然作参考。。
    orderc
        32
    orderc  
       Feb 17, 2017
    论代码可读性的重要性
    a == b && c = d ,我同事总这样写,每次看到这样的代码脑子都要短路一下
    hoythan
        33
    hoythan  
    OP
       Feb 17, 2017
    @orderc a==b && c = d? c=d 不是賦值嗎?
    orderc
        34
    orderc  
       Feb 17, 2017
    @hoythan 是赋值啊
    Balthild
        35
    Balthild  
       Mar 23, 2017 via Android
    @orderc 这种简写中逻辑运算符我一律写成 and or ,阅读的时候就很自然地和条件判断中的逻辑运算符分开对待了
    orderc
        36
    orderc  
       Mar 23, 2017
    @Balthild 这不是重点,重点是可读性差,逻辑判断应该和赋值分开。
    if (a == b) {
    c = d;
    }
    一目了然
    Balthild
        37
    Balthild  
       Mar 26, 2017 via Android
    @orderc ……联想英语中 or/and 用法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   869 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 20:36 · PVG 04:36 · LAX 13:36 · JFK 16:36
    ♥ Do have faith in what you're doing.