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

PHP 满满的一个槽点

  •  
  •   plane · 2017-09-15 02:51:20 +08:00 · 9252 次点击
    这是一个创建于 2386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    84 条回复    2017-10-19 15:16:51 +08:00
    cxbig
        1
    cxbig  
       2017-09-15 03:08:45 +08:00
    这明明是 JSON 的格式问题,干嘛怪 PHP。。。
    autoxbc
        2
    autoxbc  
       2017-09-15 03:14:35 +08:00
    引号?引号肯定不算,不管什么语言都得遵守 RFC
    cxbig
        3
    cxbig  
       2017-09-15 03:15:46 +08:00   ❤️ 4
    http://www.json.org
    好好看看 JSON 手册,value 是 string 类型的必须要用双引号。
    ETiV
        4
    ETiV  
       2017-09-15 03:31:56 +08:00
    c 语言的一个槽点:

    int n1 = 0.2, n2 = 1.8;
    int a = n1 + n2;
    printf("a = %d", a); // prints: a = 1
    // we all know it should be 2
    feiyuanqiu
        5
    feiyuanqiu  
       2017-09-15 03:32:23 +08:00
    hah,json_decode/json_encode 之后记得判断 json_last_error() === JSON_ERROR_NONE

    如果你调用一下 json_last_error_msg(),大概就不会发这个槽点了...
    yyfearth
        6
    yyfearth  
       2017-09-15 06:33:14 +08:00
    你用 JS 来 `var json = JSON.parse("{'a':'b'}")`
    照样给你 `Uncaught SyntaxError: Unexpected token ' in JSON at position 1`
    而你用 `var json= {'a':'b'}` 却没问题
    isCyan
        7
    isCyan  
       2017-09-15 08:16:46 +08:00 via Android
    JSON 和 js 对象不是一个东西啊
    askfilm
        8
    askfilm  
       2017-09-15 08:26:02 +08:00
    这明明是 JSON 的格式问题,干嘛怪 PHP。。。 +1
    nameldk
        9
    nameldk  
       2017-09-15 08:27:49 +08:00
    naive
    wly19960911
        10
    wly19960911  
       2017-09-15 08:28:31 +08:00 via Android
    JSON 没有单引号,JSON 没有单引号,JSON 没有单引号
    torbrowserbridge
        11
    torbrowserbridge  
       2017-09-15 08:43:10 +08:00
    楼主尴尬了
    hisune
        12
    hisune  
       2017-09-15 08:44:57 +08:00
    楼主尴尬了
    waczx
        13
    waczx  
       2017-09-15 08:45:46 +08:00
    楼主尴尬了
    caijihui11
        14
    caijihui11  
       2017-09-15 09:00:31 +08:00
    +1
    Efraim
        15
    Efraim  
       2017-09-15 09:05:39 +08:00
    +
    Sor
        16
    Sor  
       2017-09-15 09:06:17 +08:00
    楼主尴尬了
    to2false
        17
    to2false  
       2017-09-15 09:08:24 +08:00
    楼主尴尬了
    littleylv
        18
    littleylv  
       2017-09-15 09:21:44 +08:00
    楼主尴尬了
    justudy
        19
    justudy  
       2017-09-15 09:21:49 +08:00
    楼主尴尬了
    resturlaub
        20
    resturlaub  
       2017-09-15 09:24:26 +08:00
    明明是楼主的 满满的一个槽点
    eoo
        21
    eoo  
       2017-09-15 09:25:02 +08:00 via Android
    楼主尴尬了
    kris7i
        22
    kris7i  
       2017-09-15 09:27:08 +08:00
    楼主尴尬了
    welling
        23
    welling  
       2017-09-15 09:27:36 +08:00 via Android
    楼主尴尬,哈哈哈
    Patrick95
        24
    Patrick95  
       2017-09-15 09:31:42 +08:00
    楼主:擦,为何没有删帖功能。
    xiaohuihui
        25
    xiaohuihui  
       2017-09-15 09:31:50 +08:00
    楼主尴尬 +1
    chairuosen
        26
    chairuosen  
       2017-09-15 09:33:44 +08:00   ❤️ 2
    楼主吐槽的应该是有错并不抛,还要手动自己拿吧?
    hheedat
        27
    hheedat  
       2017-09-15 09:57:40 +08:00
    楼主还需要再学习一个
    victoryss
        28
    victoryss  
       2017-09-15 09:58:06 +08:00
    楼主尴尬 +10086
    ydxred
        29
    ydxred  
       2017-09-15 10:02:14 +08:00
    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
    Xrong
        30
    Xrong  
       2017-09-15 10:04:55 +08:00
    楼主真心尴尬了。。。
    tabris17
        31
    tabris17  
       2017-09-15 10:04:55 +08:00
    不会用\"转义吗
    ipwx
        32
    ipwx  
       2017-09-15 10:10:42 +08:00
    楼主尴尬了
    imherer
        33
    imherer  
       2017-09-15 10:15:04 +08:00
    。。。
    wucao219101
        34
    wucao219101  
       2017-09-15 10:17:19 +08:00
    楼主又要重新注册一个号了
    cevincheung
        35
    cevincheung  
       2017-09-15 10:20:01 +08:00
    楼主尴尬了
    boks
        36
    boks  
       2017-09-15 10:21:59 +08:00
    吓得我都不敢随便发帖了。
    plane
        37
    plane  
    OP
       2017-09-15 10:22:00 +08:00
    json_decode()返回 Null 不抛出错误 难道不是一个....满满的槽点。
    plane
        38
    plane  
    OP
       2017-09-15 10:23:01 +08:00
    @chairuosen 系呀
    lianxiaoyi
        39
    lianxiaoyi  
       2017-09-15 10:24:02 +08:00
    楼主尴尬了 +10010
    kiwi95
        40
    kiwi95  
       2017-09-15 10:26:07 +08:00 via iPhone
    不要啊老想着把语言批判一番
    zjp
        41
    zjp  
       2017-09-15 10:27:11 +08:00 via Android   ❤️ 1
    🙄楼主在注释里说了这里需要用一个错的 Json 字符串…只有#26 是明白人
    plane
        42
    plane  
    OP
       2017-09-15 10:29:29 +08:00
    @feiyuanqiu 还是会发( ˇˍˇ )....
    plane
        43
    plane  
    OP
       2017-09-15 10:32:26 +08:00
    @kiwi95 你们不要老想喜欢弄个大新闻,说现在已经钦定了 php 是最好的语言,就把我批判一番,你们啊,naive....
    xttanwei
        44
    xttanwei  
       2017-09-15 10:32:49 +08:00
    Returns the value encoded in json in appropriate PHP type. Values true, false and null are returned as TRUE, FALSE and NULL respectively. NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.
    Jakesoft
        45
    Jakesoft  
       2017-09-15 10:35:52 +08:00   ❤️ 2
    问:json_decode()返回 Null 不抛出错误 难道不是一个....满满的槽点(吗?)
    答:PHP 的原则是,就算你的代码写成一坨屎,它也尽量让你的代码跑下去。


    楼主这个回答满意不, 逃)
    mrgeneral
        46
    mrgeneral  
       2017-09-15 10:38:34 +08:00
    最近这么多黑 PHP 的 真的知道怎么用 PHP 吗
    raysonlu
        47
    raysonlu  
       2017-09-15 10:40:10 +08:00
    @plane null 对于 php 的一般判断来说就是 false 啦,你还想抛出什么错误?要给你个错误提示? or 直接结束脚本执行?
    zjsxwc
        48
    zjsxwc  
       2017-09-15 10:42:50 +08:00
    楼主搞得好像别的语言至此这种不规范的 json 写法一样. 大家都不支持, 没毛病
    TypeErrorNone
        49
    TypeErrorNone  
       2017-09-15 10:57:09 +08:00
    JSON 支持的语法知道吗
    66beta
        50
    66beta  
       2017-09-15 11:06:43 +08:00
    Javascript 惊天大 BUG

    0.1+0.2 = 0.30000000000000004
    g0thic
        51
    g0thic  
       2017-09-15 11:41:22 +08:00
    v2ex 不能删帖系列
    svenFeng
        52
    svenFeng  
       2017-09-15 11:53:36 +08:00 via Android
    原来 PHP 是用 null 返回错误的。。。
    wow。。。。。。。。。
    konakona
        53
    konakona  
       2017-09-15 11:57:24 +08:00
    你真的会 PHP 吗? 23333
    json 里字符串是要用双引号的。
    misaka19000
        54
    misaka19000  
       2017-09-15 12:11:45 +08:00 via Android
    我都懒的黑 PHP 了,不过楼主再次让我确定 PHP 果然是世界上最好的语言,果然最好的语言才能造就出像楼主这样的程序员
    AlwaysBee
        55
    AlwaysBee  
       2017-09-15 12:32:51 +08:00
    楼主,惊喜不惊喜?(玩笑~

    不过也是经验的问题吧,会有这样的疑问也不奇怪,下次吐槽谨慎一点
    plane
        56
    plane  
    OP
       2017-09-15 12:42:19 +08:00 via iPhone
    @zjsxwc 别的语言都抛出错误(捂脸) 然鹅大家都跑偏了
    lepig
        57
    lepig  
       2017-09-15 12:53:18 +08:00
    哈哈哈 我笑笑就好
    plane
        58
    plane  
    OP
       2017-09-15 12:56:12 +08:00 via iPhone
    @AlwaysBee 吸取经验...
    miaotaizi
        59
    miaotaizi  
       2017-09-15 12:59:08 +08:00
    可惜不能删帖
    zjsxwc
        60
    zjsxwc  
       2017-09-15 13:26:46 +08:00
    @plane #56

    其实你可以自己封装个抛异常的 json decoder, 或者 composer 上去随便搞个一个封装好的
    plane
        61
    plane  
    OP
       2017-09-15 13:30:23 +08:00
    @raysonlu 推荐你搜一下 json_last_error...
    Elvis0
        62
    Elvis0  
       2017-09-15 13:30:56 +08:00
    哈哈,好尴尬
    iyaozhen
        63
    iyaozhen  
       2017-09-15 13:31:42 +08:00
    不抛异常这个事情确实值得吐槽,但是这也是语言本身的特性,基本靠返回值判断。这也没啥问题呀
    plane
        64
    plane  
    OP
       2017-09-15 13:33:22 +08:00
    @mrgeneral 会不会用跟怎么设计是两回事?
    weilongs
        65
    weilongs  
       2017-09-15 13:40:18 +08:00
    楼主尴尬了
    Phariel
        66
    Phariel  
       2017-09-15 13:44:26 +08:00 via Android
    楼主你试没试过 JSON 里写注释呢 (滑稽
    raysonlu
        67
    raysonlu  
       2017-09-15 13:56:28 +08:00
    @plane 要考虑一下 PHP 的设计意图,如果 json_decode 也抛错误,那如何判断 decode 是否成功了?(如果返回一个对象或数组也显得麻烦),倒不如分开这些功能,coder 想怎么摆弄就怎么摆弄。
    clino
        68
    clino  
       2017-09-15 14:02:56 +08:00
    @ETiV 靠,我还去试了一下...后来定睛一看原来是 int
    miniwade514
        69
    miniwade514  
       2017-09-15 14:07:37 +08:00
    楼上吐槽楼主的,都没看懂楼主的槽点啊,所以楼主还是多写代码少吐槽吧,槽槽相吐何时了
    Alex6
        70
    Alex6  
       2017-09-15 14:10:41 +08:00
    php 一路走到头,当然给你一个 null :-)
    Technetiumer
        71
    Technetiumer  
       2017-09-15 14:12:57 +08:00
    sobigfish
        72
    sobigfish  
       2017-09-15 14:20:13 +08:00
    那么问题来了,这题能不能作为面试题,难道几个 n 年经验的
    Tokin
        73
    Tokin  
       2017-09-15 14:20:56 +08:00
    反正我不是很懂 json,每次想要需要的 json 的时候,我都是先写成数组,然后 php 转成 json。。。
    话说,一般不会出问题才对啊,至少我会在 json_decode 之后 empty 判断一下数组是否有值。。。
    vjnjc
        74
    vjnjc  
       2017-09-15 14:29:11 +08:00
    因为 Java 会抛异常,
    所以必须有捕获逻辑,
    所以所以他们都说 Java 啰嗦
    PHP 身为很简短的语言,当然不抛啦
    usedname
        75
    usedname  
       2017-09-15 15:03:55 +08:00
    https://www.v2ex.com/member/plane
    广州 123 科技有限公司 / 全栈工程师
    goodspb
        76
    goodspb  
       2017-09-15 15:59:42 +08:00 via iPhone
    楼主尴尬了
    pynix
        77
    pynix  
       2017-09-15 16:09:59 +08:00
    楼主尴尬了
    akstrom
        78
    akstrom  
       2017-09-15 16:11:04 +08:00
    @plane php 是弱类型的语言,他对这个不会刻意强制,所以方便的同时也要小心.....
    coooooooode
        79
    coooooooode  
       2017-09-15 16:43:58 +08:00
    你明显可以先看看手册

    ```
    $json[] = "{'aaa': 'bbb'}";
    $result = json_decode($json[0]);
    var_dump($result);
    var_dump(json_last_error(), json_last_error_msg());
    ```

    output:

    NULL
    int(4)
    string(12) "Syntax error"
    barbery
        80
    barbery  
       2017-09-15 19:50:04 +08:00
    年轻人,不要老是想着弄一个大新闻,OK ?
    leekafai
        81
    leekafai  
       2017-09-15 19:58:26 +08:00 via Android
    楼主满满的一个槽点
    KWPr0
        82
    KWPr0  
       2017-09-15 20:00:48 +08:00
    发帖后悔却无法删除甚至无法隐藏系列 日常 V2 笑点 😝
    zthxxx
        83
    zthxxx  
       2017-09-16 00:45:29 +08:00
    楼主满满的一个笑点 #V2 不能删帖日常#
    haierspi
        84
    haierspi  
       2017-10-19 15:16:51 +08:00
    楼主真尴尬... 话说不能删帖是吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1167 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:21 · PVG 02:21 · LAX 11:21 · JFK 14:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.