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

PHP IF 简写怎么写多个条件

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

    比如

    $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  
       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   ·   实用小工具   ·   3106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:14 · PVG 22:14 · LAX 06:14 · JFK 09:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.