PHP 满满的一个槽点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
plane
V2EX    PHP

PHP 满满的一个槽点

  •  
  •   plane Sep 15, 2017 10470 views
    This topic created in 3146 days ago, the information mentioned may be changed or developed.

    84 replies    2017-10-19 15:16:51 +08:00
    cxbig
        1
    cxbig  
       Sep 15, 2017
    这明明是 JSON 的格式问题,干嘛怪 PHP。。。
    autoxbc
        2
    autoxbc  
       Sep 15, 2017
    引号?引号肯定不算,不管什么语言都得遵守 RFC
    cxbig
        3
    cxbig  
       Sep 15, 2017   4
    http://www.json.org
    好好看看 JSON 手册,value 是 string 类型的必须要用双引号。
    ETiV
        4
    ETiV  
       Sep 15, 2017
    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  
       Sep 15, 2017
    hah,json_decode/json_encode 之后记得判断 json_last_error() === JSON_ERROR_NONE

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


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

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

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

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

    ```
    $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  
       Sep 15, 2017
    年轻人,不要老是想着弄一个大新闻,OK ?
    leekafai
        81
    leekafai  
       Sep 15, 2017 via Android
    楼主满满的一个槽点
    KWPr0
        82
    KWPr0  
       Sep 15, 2017
    发帖后悔却无法删除甚至无法隐藏系列 日常 V2 笑点
    zthxxx
        83
    zthxxx  
       Sep 16 2017
    楼主满满的一个笑点 #V2 不能删帖日常#
    haierspi
        84
    haierspi  
       Oct 19, 2017
    楼主真尴尬... 话说不能删帖是吧?
    About     Help     Advertise     Blog     API     FAQ     Solana     1033 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 176ms UTC 23:06 PVG 07:06 LAX 16:06 JFK 19:06
    Do have faith in what you're doing.
    ubao msn 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