hoythan
V2EX  ›  PHP

PHP IF 简写怎么写多个条件

  •  
  •   hoythan ·
    PRO
    · Feb 16, 2017 · 5576 views
    This topic created in 3549 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
    hoythan
    OP
    PRO
    Feb 16, 2017
    1
    小括号是我瞎编的,我不知怎么连续写.
    zhaohehe
    zhaohehe
    Feb 16, 2017
    2
    @hoythan 就是小括号 但是不是很推荐吧 读起来有点费劲 😆
    shiny
    shiny
    PRO
    Feb 16, 2017
    3
    这种情况慎用三元运算符
    ALeo
    ALeo
    Feb 16, 2017
    4
    这种三目表达式 写那么复杂干嘛呢。。

    其实也就是

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

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

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