PHP IF 简写怎么写多个条件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hoythan
V2EX    PHP

PHP IF 简写怎么写多个条件

  •  
  •   hoythan 2017-02-16 18:06:43 +08:00 4698 次点击
    这是一个创建于 3158 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如

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

    歌词大意

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

    其实也就是


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

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

    想要代码漂漂亮亮,我个人倒建议可以试试其他某些语言,比如 Ruby 。
    xzem
        15
    xzem  
       2017-02-16 19:41:15 +08:00 via Android
    @Mitt php 的三目不能这么些,你这么些不管前面是否为真都会一直执行到最后一个三目表达式
    l12ab
        16
    l12ab  
       2017-02-16 20:19:26 +08:00
    这种情况我宁愿多写几个 if else ,看起来舒服些
    realpg
        17
    realpg  
    PRO
       2017-02-16 20:27:08 +08:00
    @hoythan #13
    敢这么写一次的员工我都开除了……
    仅供参考
    Mitt
        18
    Mitt  
       2017-02-16 21:07:12 +08:00
    @xzem 那就加个括号 2333 一般不会写那么多 超过两层判断就直接上 if else 了
    abugs
        19
    abugs  
       2017-02-16 21:07:50 +08:00
    三元一般够用,如果你有多个 if ,建议使用常规 if else
    konakona
        20
    konakona  
       2017-02-16 21:13:05 +08:00
    这个可以的,这样写没有问题,能阅读。只是容易不小心写错。
    wizardoz
        21
    wizardoz  
       2017-02-16 21:16:11 +08:00
    写多个条件就不是简写了
    lh900519
        22
    lh900519  
       2017-02-16 21:25:37 +08:00 via Android
    @ALeo 不是应该用 || ?
    keinx
        23
    keinx  
       2017-02-16 21:28:59 +08:00
    你入错行了,来 Python ,人生苦短我用 python
    hoythan
        24
    hoythan  
    OP
       2017-02-16 21:30:31 +08:00
    @realpg
    @abugs
    @l12ab
    我的错,是我一时蒙蔽了自己的心智.以后再用打断自己手.
    Reign
        25
    Reign  
       2017-02-16 21:32:27 +08:00
    这年头,为了装逼也是蛮拼的
    cxbig
        26
    cxbig  
       2017-02-17 01:51:40 +08:00
    你见哪个外国人这么写赶快拉黑
    Ternary Operator 嵌套不符合 Best Practice 原则。他人很难看清楚逻辑结构
    在我们公司,写成这样绝对过不了代码审查
    写成一行也不代表跑起来就快
    flydogs
        27
    flydogs  
       2017-02-17 08:37:25 +08:00
    老老实实 if else
    juice
        28
    juice  
       2017-02-17 09:08:44 +08:00
    代码优先给人读,次之再给机器读
    killerv
        29
    killerv  
       2017-02-17 10:16:37 +08:00
    代码可读性很重要
    hoythan
        30
    hoythan  
    OP
       2017-02-17 10:18:10 +08:00
    @cxbig wordpress 程序中有大量的简写...
    v2dead
        31
    v2dead  
       2017-02-17 10:53:35 +08:00
    wordpress 出了名的烂代码,背了那么多年的历史包袱,你居然作参考。。
    orderc
        32
    orderc  
       2017-02-17 14:54:16 +08:00
    论代码可读性的重要性
    a == b && c = d ,我同事总这样写,每次看到这样的代码脑子都要短路一下
    hoythan
        33
    hoythan  
    OP
       2017-02-17 15:45:11 +08:00
    @orderc a==b && c = d? c=d 不是值?
    orderc
        34
    orderc  
       2017-02-17 16:02:31 +08:00
    @hoythan 是赋值啊
    Balthild
        35
    Balthild  
       2017-03-23 10:12:39 +08:00 via Android
    @orderc 这种简写中逻辑运算符我一律写成 and or ,阅读的时候就很自然地和条件判断中的逻辑运算符分开对待了
    orderc
        36
    orderc  
       2017-03-23 11:37:11 +08:00
    @Balthild 这不是重点,重点是可读性差,逻辑判断应该和赋值分开。
    if (a == b) {
    c = d;
    }
    一目了然
    Balthild
        37
    Balthild  
       2017-03-26 14:41:13 +08:00 via Android
    @orderc ……联想英语中 or/and 用法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3756 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:16 PVG 08:16 LAX 17:16 JFK 20:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86