这就是我为什么从 PHP 转向 Go 的原因 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wangbenjun5
V2EX    程序员

这就是我为什么从 PHP 转向 Go 的原因

  •  
  •   wangbenjun5 2020-04-01 22:22:32 +08:00 17405 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。

    记得以前有一次面试,面试官是一个和我年龄相仿的人,他就 PHP 里面 count 的用法连续问了我很多情况下的结果:

    count(0); count('00000'); count("0") count(1) count(null) count("null") count($undefinedVariable) ... 

    平时一般只会用 count 去计算数组或集合的元素个数,没想到还有这么多种情况,就一下子被问到了,只怪自己基础不扎实,没把 PHP 的手册背下来。。。

    很多 PHP 的内置函数令人非常头疼,很多函数有很多功能、可以接受各种参数,返回的结果更无章可循,相比之下,go 的内置函数就非常简单明了,其参数类型固定,基本上一个函数只干一件事。

    在写 PHP 的时候,每次调用别人写好的函数都非常不放心,因为你根本不知道这个函数返回的结果是什么东西,它可能是数组、可能是字符串、也可能是个数字。。。即使函数有注释也不一定可信,这其中有部分原因是因为开发人员水平较差,但是 go 的类型限定保证了一个函数只会返回一个固定类型的结果。

    写 PHP 的时间越久你就会发现 PHP 的弱类型带来的好处远远大于坏处,项目写到最后几乎无法维护!而且里面会出现各种各样的奇怪 bug 。虽然说良好的编程习惯和规范可以避免部分情况,但是很多时候你没法通过这点保证。

    使用 PHP,一个接口写完,很多时候心里压根没底,但是用 GO,写完只要编译没报错,基本上都没问题。

    第 1 条附言    2020-04-02 12:39:31 +08:00
    只是一小方面,如果换个时髦的说法,那就是写 go 的心智负担要小很多,php 虽然灵活,但不确定性太多。
    第 2 条附言    2020-04-02 12:49:20 +08:00
    不是说弱类型就一定有问题,PHP 的很多问题不是弱类型导致的,而且设计之初就留下的坑,比如毫无规律的函数命名方式、无章可循的参数顺序,你找不到边界。。。现在最新的 php7+已经在类型上面做文章了,这是个好事
    155 条回复    2020-04-09 16:17:05 +08:00
    1  2  
    yafoo
        1
    yafoo  
       2020-04-01 22:31:38 +08:00 via Android   1
    各有优缺点吧,有些人喜欢自由,有些人喜欢被束缚。
    salamanderMH
        2
    salamanderMH  
       2020-04-01 22:35:51 +08:00 via Android   1
    把 PHP 的手册背下来的也。。。面试挺随机的,我觉得这种问题。。
    fox0001
        3
    fox0001  
       2020-04-01 22:36:17 +08:00 via Android   1
    PHP 内置函数名称最为要命,无章可循…
    puzzle9
        4
    puzzle9  
    &bsp;  2020-04-01 22:39:49 +08:00
    这种事情是吧
    如果站在圈外 自然看的明白
    如果站在圈内 也不觉得迷糊
    iConnect
        5
    iConnect  
       2020-04-01 22:45:33 +08:00 via Android
    弱类型项目大了之后,确实缺乏一种安全感。
    0DBBFF
        6
    0DBBFF  
       2020-04-01 22:47:37 +08:00   5
    "写 PHP 的时间越久你就会发现 PHP 的弱类型带来的好处远远大于坏处"
    aloxaf
        7
    aloxaf  
       2020-04-01 22:50:35 +08:00   1
    我也觉得弱类型毫无意义(注:弱类型!=动态类型),不只是维护的问题,还有安全性的问题
    不过这个面试题……


    P.S. php 7 其实也有 strict mode 了
    PP.S. 我感觉 LZ 很适合学 Rust (笑
    Felldeadbird
        8
    Felldeadbird  
       2020-04-01 22:50:43 +08:00
    好处远远大于坏处,项目写到最后几乎无法维护

    既然好处大于坏处,项目怎么最后无法维护呢?奇怪的 BUG ?前端传递 1. 结果 PHP 接收到的 其他值?

    感觉楼主没突出转 GO 的重要性啊。
    masker
        9
    masker  
       2020-04-01 22:52:26 +08:00 via Android   2
    你就是为了转而转,说的那么冠冕堂皇
    dcsite
        10
    dcsite  
       2020-04-01 22:54:00 +08:00   19
    PHP 是无辜的,弱类型语言

    可恨的是出这种面试题的人,建议你反问他:你知道茴香豆的茴字有几种写法吗?
    crella
        11
    crella  
       2020-04-01 22:5:46 +08:00
    python 和 ruby 不都是动态强类型吗?

    type('text') => class 'str'

    'text'.class => String
    Numbcoder
        12
    Numbcoder  
       2020-04-01 22:57:12 +08:00   1
    不写测试,神仙语言也救不了你
    wangyzj
        13
    wangyzj  
       2020-04-01 22:59:26 +08:00
    学到了
    stabc
        14
    stabc  
       2020-04-01 23:00:31 +08:00   1
    我写 PHP 好多年了,从来没遇到过那种问题。PHP 坑是很多,但是很多你几乎踩不到。新版本的 PHP 也支持 function 的类型定义了。
    hantsy
        15
    hantsy  
       2020-04-01 23:00:51 +08:00   1
    这也能和语言的优劣扯上关系,你应该 PHP 和 Go 都从来没写过测试吧。
    cmdOptionKana
        16
    cmdOptionKana  
       2020-04-01 23:01:21 +08:00
    静态语言一大堆,为什么选择 Go ?
    outoftimeerror
        17
    outoftimeerror  
       2020-04-01 23:03:28 +08:00
    写完只要编译没报错,基本上都没问题。
    如果是这个特性的话,我觉得 rust 更符合你的期待。
    back0893
        18
    back0893  
       2020-04-01 23:03:50 +08:00   1
    我觉得你这面试题不是就是茴有几种写法...
    hantsy
        19
    hantsy  
       2020-04-01 23:04:02 +08:00
    PHP 好像 5.6 开始在 OOP 方面就基本和 Java,C#可以站在一条起跑线上,弱类型自己要用,那只说是自己的问题。
    hantsy
        20
    hantsy  
       2020-04-01 23:05:31 +08:00
    大千世界无奇不有,V 站真是一个娱乐网站。
    mcfog
        21
    mcfog  
       2020-04-01 23:20:40 +08:00 via Android   2
    心情极度复杂。要是多年前,我会庆幸又有个半桶水离开 php 圈子了,可是现在写 go 的机会也多了,团队也多了,这样的半桶水在 php 团队里写的代码气味特征明显一眼就能找到,可是混迹在 golang 团队里,好像还真挺难发现的,等发现的时候,可能已经对代码库造成难以承受的破坏了
    blless
        22
    blless  
       2020-04-01 23:29:26 +08:00
    我也觉得是这样,Rust 也想学,但是上手难度太高了。
    Dart
        23
    Dart  
       2020-04-01 23:32:14 +08:00
    面试人傻 B,你嘛。。。
    also24
        24
    also24  
       2020-04-01 23:45:53 +08:00   1
    莫名其妙的想起了这个:

    https://i.loli.net/2020/04/01/Ce74FGnOioMbf5a.png
    mamahaha
        25
    mamahaha  
       2020-04-02 00:01:58 +08:00
    不想用就没必要再踩一脚了。就像分手的情侣,好聚好散,藕断丝连会让彼此都痛苦。
    ferock
        26
    ferock  
    PRO
       2020-04-02 00:07:09 +08:00 via Android   4
    但是用 GO,写完只要编译没报错,基本上都没问题。


    看来你写的 go 也不咋地
    ericgui
        27
    ericgui  
       2020-04-02 00:08:37 +08:00   1
    面试官是个神经病
    sagaxu
        28
    sagaxu  
       2020-04-02 00:10:20 +08:00 via Android
    天呐,7 个 count,我一个都答不上来,我只会 count 数组
    Varobjs
        29
    Varobjs  
       2020-04-02 00:10:59 +08:00 via Android
    这么说, 也可以转 Java 啊
    tourist2018
        30
    tourist2018  
       2020-04-02 00:14:45 +08:00
    碰见面试问这种问题的 我会直接怼回去
    nvhanzhi
        31
    nvhanzhi  
       2020-04-02 00:14:52 +08:00
    面试不爽直接怼回去就行了,反正以后再也难见面!
    yunye
        32
    yunye  
       2020-04-02 00:49:35 +08:00 via Android
    现在转个语言也要全网声明了?
    JJstyle
        33
    JJstyle  
       2020-04-02 01:07:48 +08:00 via iPhone   1
    最讨厌这种面试题,这种 count 有啥意思
    zhuzhibin
        34
    zhuzhibin  
       2020-04-02 01:33:51 +08:00
    我知道了 你因为无非强类型 所以转了 go,那为什么不转 java 还有其他??
    lithbitren
        35
    lithbitren  
       2020-04-02 02:05:09 +08:00
    目前最满足主楼最后一句话的只有 rust,其他语言都达不到 rust 的程度,rust 虽然也不完全保证,不过应该是知名语言里最能令人跳脚的。
    halo117
        36
    halo117  
       2020-04-02 03:59:39 +08:00 via iPhone
    转语言以后,不信不会有新坑,提升编码姿势水平才是关键,大道至简语言也有一些茴字有几种写法的面试问题
    love
        37
    love  
       2020-04-02 06:42:17 +08:00 via Android
    这种面试官怕是脑子有坑,你也可以反问它另外一个函数给它异常输入结果是啥
    ben1024
        38
    ben1024  
       2020-04-02 08:31:34 +08:00
    面试题挺糟糕,换个语言的理由也挺糟糕
    phpcxy
        39
    phpcxy  
       2020-04-02 08:49:00 +08:00
    不用写测试的?
    LokiSharp
        40
    LokiSharp  
       2020-04-02 09:00:32 +08:00
    你用了 Go 之后会发现,其实 Go 也不咋地
    anteros
        41
    ateros  
       2020-04-02 09:02:45 +08:00   5
    基本上可以认定为人的问题。
    php 写的好的,写 go 也不会有问题。
    php 写的不好的,写 go 也会有问题。
    反之亦然。
    AngryMagikarp
        42
    AngryMagikarp  
       2020-04-02 09:03:02 +08:00
    这种情况在 Python 上也有。

    因为一个大型项目参与的人一定很多,而人员之间水平参差不齐,弱类型确实更容易导致混乱。注意这个“更”字,这是相对的。

    PHP 是世上最好的语言。
    yvescheung
        43
    yvescheung  
       2020-04-02 09:05:44 +08:00
    这真的是为了面试而面试了,我知道茴香豆有几种写法但是我也成不了鲁迅
    2379920898
        44
    2379920898  
       2020-04-02 09:07:37 +08:00
    你不如转个客户端,后端语音只是一种工具,学到不同的思路才能恒久远
    skys215
        45
    skys215  
       2020-04-02 09:12:14 +08:00   1
    > "就一下子被问到了,只怪自己基础不扎实,没把 PHP 的手册背下来"

    换了 go,基础就扎实了吗,就不用背手册也能通过面试了吗
    dongisking
        46
    dongisking  
       2020-04-02 09:21:57 +08:00
    1,1,1,1,0,报错(没答对)。我看了一下好像也没多难啊
    qq1340691923
        47
    qq1340691923  
       2020-04-02 09:23:52 +08:00
    不建议转 go 真的。。
    qsnow6
        48
    qsnow6  
       2020-04-02 09:24:29 +08:00
    不写测试的锅,不要怪弱类型语言
    everhythm
        49
    everhythm  
       2020-04-02 09:27:19 +08:00   2
    这种题目你仔细想想,不是有病么

    早在 c++ 面试题年代,就有诸如 n = ++i+i++; 问你 n 和 i 值的题目

    我为什么不写成 i+=1; n+=i; i+=1; n+=i; ?

    是个正常人,根本不会这么写代码,我有健壮的符合工程的代码写法,为什么要研究这种刁钻且无用的写法?
    qq1340691923
        50
    qq1340691923  
       2020-04-02 09:29:07 +08:00
    go 也就比 php 好一点,不如搞 java
    KasonPasser
        51
    KasonPasser  
       2020-04-02 09:30:38 +08:00   2
    新的 PHP 版本中只能 count 数组。
    zjsxwc
        52
    zjsxwc  
       2020-04-02 09:31:38 +08:00
    go 就是没有泛型不爽,什么时候有泛型就完爆别的 GC 语言了
    jin7
        53
    jin7  
       2020-04-02 09:32:36 +08:00
    不推荐 go 语言
    sagaxu
        54
    sagaxu  
       2020-04-02 09:40:32 +08:00 via Android
    @zjsxwc 完爆不了,go 的 gc 目前稍有劣势
    Still4
        55
    Still4  
       2020-04-02 09:47:15 +08:00
    说下我转 go 的原因,php 的多线程太弱了,线程之间内存不共享我要你干什么
    Godikov
      &bsp; 56
    Godikov  
       2020-04-02 09:49:42 +08:00
    病句,去掉“的原因”。
    ericguo
        57
    ericguo  
       2020-04-02 09:50:17 +08:00   1
    现在从 PHP 转 Go 不是新闻,从 Go 转 PHP 才是新闻。
    tt67wq
        58
    tt67wq  
       2020-04-02 09:52:21 +08:00   2
    我司正在从 go 转向 php
    从鄙视链的高层走向底层
    keepfun
        59
    keepfun  
       2020-04-02 10:01:56 +08:00
    Warning: count(): Parameter must be an array or an object that implements Countable
    除了最后一个 全是这个报错 这是什么脑残面试题啊

    PHP 7.3.11 (cli) (built: Dec 13 2019 19:21:21) ( NTS )
    始终坚信:php 是世界最好的语言~
    keepfun
        60
    keepfun  
       2020-04-02 10:03:26 +08:00
    但是是有结果的 如果屏蔽报错
    qq1340691923
        61
    qq1340691923  
       2020-04-02 10:03:36 +08:00
    @tt67wq 什么原因
    jswh
        62
    jswh  
       2020-04-02 10:04:17 +08:00
    所以你怎么不选 Rust ?那个才是编译不报错,连 bug 都几乎没有啊。
    说到底,还是钱。如果 PHP 给钱多工作好找,还会转 go 么?
    zjsxwc
        63
    zjsxwc  
       2020-04-02 10:04:23 +08:00
    @sagaxu

    go 的 cannel csp 编程模式对于处理高并发心智负担更小,比用多线程各种锁处理同步编程的要求低,水平不高的开发者也能快速出活且稳定可靠。

    至于 GC,都用 GC 了,GC 性能在可以接受范围内都一样,要实时低延时,当然是直接用无 GC 的 rust 和 c/cpp 去, ~~“我都穷的吃泡面了,你跟我来谈健康? ”。

    没有泛型的问题就导致了,go 写业务没有 java 快,当然更不能和 php 比写业务的效率了,所以目前我的看法 go 在业务搬砖领域还是不推荐,挺适合写基础设施的。
    tt67wq
        64
    tt67wq  
       2020-04-02 10:12:05 +08:00
    @qq1340691923 #61 接了百度的二手外包,已经是用 php 写的烂尾项目了,烂尾+ php, 我简直要原地升天
    keepeye
        65
    keepeye  
       2020-04-02 10:12:54 +08:00
    面试官估计也就不超过 3 年经验吧,会问这种问题不奇怪
    jy28520
        66
    jy28520  
       2020-04-02 10:13:41 +08:00   1
    coun 是查询数组的长度或是实现了 Countable 接口的对象的
    如果不是这两个会转换成这个实现接口的
    如果转换的过程中会相当于装箱成一个数组 null 是个特殊的对象
    其他的都会转换成 array(原始值)
    zjttfs
        67
    zjttfs  
       2020-04-02 10:13:51 +08:00   1
    php , go ,py ,rust 依然主力 PHP...
    dapang1221
        68
    dapang1221  
       2020-04-02 10:17:14 +08:00
    业务代码里你去 count 一个 undefinedVariable 就离谱,这破题还不如手写反转红黑树
    Tomorrowxxy
        69
    Tomorrowxxy  
       2020-04-02 10:17:30 +08:00
    @fenglangjuxu #59 7.2 以后就只能 count 数组或对象了
    way2create
        70
    way2create  
       2020-04-02 10:20:14 +08:00
    觉得面试问这种问题很弱智
    chizuo
        71
    chizuo  
       2020-04-02 10:21:40 +08:00
    @crella python 那个叫 tyoe hint,咋就变成强类型了?
    also24
        72
    also24  
       2020-04-02 10:21:49 +08:00 via Android
    @Godikov 哈哈哈哈我就想看谁先说这个
    bravist
        73
    bravist  
       2020-04-02 10:26:18 +08:00
    动态类型与静态类型语言有一定的区别,主要看应用场景,解决问题的复杂度,时间成本等等

    用了多年的 PHP 开发,必须要掌握一门动态语言,对比之后你才发现各自的优劣(这是从语言设计的本身角度讲)
    davidyanxw
        74
    davidyanxw  
       2020-04-02 10:26:43 +08:00
    1.面试题目技术含量不高,照实说我觉得不算错
    2.弱类型语言都有类似的问题,再加上不习惯写单元测试。
    大项目就不太可控,如果单元测试覆盖的全,很大程度上会改善项目质量
    MengiNo
        75
    MengiNo  
       2020-04-02 10:33:22 +08:00   1
    @dapang1221 很正常 因为 PHP 怎么写都不会报错最多给 0 值的特性,我都不知道多少次在祖传代码里发现 整段函数里一次都没出现的变量,好好的被 count 、explode 、foreach 甚至 array_merge 一下了。显然是不知道经了多少手,其中一手的人改了什么东西,把这个变量删了。而 PHP 这种情况下 一不会 fatal, 二会自动取 0 值,所以大概率最终计算结果是对的,所以改的人没注意,后续维护的人没发现或者干脆也不想碰,就这样留下来了。
    虽然我个人认为这是 PHP 一个非常不好的一点,导致 PHP 真的是乱写都可以跑。虽然 count($undefinedVar)没人会故意想这么写。但话又说回来,万一维护到后期出现奇奇怪怪的情况的话,如果你比较熟练的知道可能是因为某些莫名其妙的写法造成的话,就能对排错节约大量时间。考官这样问应该不是考基础的什么 countable 之类,反而像是考进阶(非得圆的话 2333 )
    qce7
        76
    qce7  
       2020-04-02 10:46:26 +08:00
    count() 一个字符串我在支付宝的 PHP SDK 代码中见过,这种神仙用法不想吐槽了
    killerv
        77
    killerv  
       2020-04-02 11:16:30 +08:00   1
    我使用 PHP 和 Go,但是我感觉这个题目没什么意义,我想不到 count 非 Countable 的使用场景,当然你可以说返回值不一定是预期类型,但是 PHP7.2 之后 count 字符串之类的会报错。
    PHP 的优点也是缺点,很多人都是初识 PHP 的时候会觉得这玩意上手真快,后期维护的时候发现了这种快带来的题,然后又开始抨击。还是应该客观看待吧,PHP 有他的使用场景,而且项目的健壮性和使用者水平有很大关系。
    whoami9894
        78
    whoami9894  
       2020-04-02 11:49:52 +08:00
    直接怼回去啊,对面试官说:问这种问题,你的水平可想而知
    crella
        79
    crella  
       2020-04-02 11:56:24 +08:00 via Android
    @chizuo 我是看 https://blog.csdn.net/sgs595595/article/details/83986580 里的编程语言分类图的。
    CSM
        80
    CSM  
       2020-04-02 12:01:33 +08:00 via Android
    吐槽一下标题。

    从 PHP 转向 Go 的原因 -> PHP 是弱类型

    为什么从 PHP 转向 Go 的原因 -> 为什么(从 PHP 转向 Go 的原因) -> 为什么 PHP 是弱类型

    可见“为什么……的原因”是个二级的原因。
    crella
        81
    crella  
       2020-04-02 12:07:32 +08:00 via Android
    @bravist 之前专门比较过过 php5 与 js py3 ruby golang c#的闭包,刚才又看了看 php7.4 的闭包。发现 php 设计的水平真的是低于平均线……
    SummerWQM
        82
    SummerWQM  
       2020-04-02 12:23:13 +08:00
    7 的版本 已经强制要求传入 数组类型了
    wangbenjun5
        83
    wangbenjun5  
    OP
       2020-04-02 12:34:09 +08:00
    @0DBBFF
    @Felldeadbird 手误,打错了
    wangbenjun5
        84
    wangbenjun5  
    OP
       2020-04-02 12:36:16 +08:00
    @hantsy
    @phpcxy
    @qsnow6

    测试是非必须的,而且也不能完成 cover 到,靠测试岂不是有点南辕北辙
    barbery
        85
    barbery  
       2020-04-02 12:36:59 +08:00
    再过一段时间,楼主遇到了继承、reflect 的问题,然后“这就是我为什么从 go 转回 php 的原因”
    hantsy
        86
    hantsy  
       2020-04-02 12:40:29 +08:00
    @wangbenjun5 我们思维不在一个体系的。在我概念中,写测试是必不可少的,是 CI,CD,自动化的基础,最近几年我参与几乎所有的项目都要求写测试。
    wangbenjun5
        87
    wangbenjun5  
    OP
       2020-04-02 12:41:17 +08:00
    @MengiNo 对的,PHP 的解释器非常“智能”,经常给你自动做一些类型转换或者骚操作
    wangbenjun5
        88
    wangbenjun5  
    OP
       2020-04-02 12:44:52 +08:00
    @hantsy 测试是测试,php 能写测试 go 难道就不能写了吗,你写再多测试就避免 count 的谜之返回结果了吗?
    justfortest
        89
    justfortest  
       2020-04-02 12:58:06 +08:00 via Android
    hantsy
        90
    hantsy  
       2020-04-02 12:59:25 +08:00
    @wangbenjun5 不讨论,好吧。你还在用 PHP 弱类型为主,我最后一次写 PHP 的项目就全部 OOP,用强类型,那都好多年前了。
    odirus
        91
    odirus  
       2020-04-02 13:05:22 +08:00   1
    前期的技术选型很重要,最好有前瞻性的思考。

    刚开始起步要求快用 PHP 无可厚非,团队上来了就用编译型语言如 Java 等适合协作,新旧系统之间用 RPC 来打通,慢慢的把就老系统过渡到新系统,团队足够强的话也可以考虑引入 ServiceMesh 来屏蔽语言差异。

    这样看来前期最重要的就是开放给外部的接口(例如提供给客户端的或者三方的)一定要有较好的扩展性;当内部有互相调用的时候要制定好系统之间的接口调用规范,也要有较好的扩展性,协议最好是跨语言的,可能会牺牲掉一些性能,但以后方便扩展到多语言生态。

    总之,制定好服务与服务之间的接口规范,服务与外部系统的接口规范,以后内部随便怎么折腾都没关系。

    我们这边的发展路线就是 PHP -> JAVA 、PHP (当时用的 Thrift ) -> Java -> 未来可能会引入 ServiceMesh 概念来拥抱多语言开发生态
    sunznx
        92
    sunznx  
       2020-04-02 13:07:35 +08:00
    我想转 go 是因为 php 找不到工作
    sunznx
        93
    sunznx  
       2020-04-02 13:09:36 +08:00
    另外,如果面试官问我这个问题,我会觉得他是傻逼,给我 50k 我就会和他一起干活
    areless
        94
    areless  
       2020-04-02 13:26:18 +08:00 via Android
    没必要计较语言的优劣,人家就是这样设计的,任何语言都可以 ffi 的~~~这几年 php 转 go,过几年 go 转 lua,再几年 python 转 ruby 年轻人太过浮躁。09 年 go 出来时同行都说 php 转 go,我觉得大部分项目用不到 go ~何况现在 php 也可以 ffi
    laravel
        95
    laravel  
       2020-04-02 13:26:45 +08:00
    做什么项目,用什么语言,没有说什么项目和要求,讨论语言没意义吧。
    winterfell30
        96
    winterfell30  
       2020-04-02 13:34:37 +08:00
    我是 C++后端,PHP 用的比较少,不过有时会和 PHP 后端对接,就我的感觉在对接上 PHP 确实问题多一点,随便举两个例子
    1.接收 PHP 后端下发的 json 数据,一个字段非空的时候是正常字典,空的时候就变成 array 了,虽然可以代码上兼容,但是还是感觉挺难受
    2.PHP 后端来请求 C++下发的 json 数据,我的字典 key 是 id 形式的,比如"1","2"这种,PHP 那边接收到就会有问题而且说没办法解决,最后我把 key 都改成了 st_1,st_2 才行,求问一下这个真的没办法解决吗
    niucility
        97
    niucility  
       2020-04-02 13:42:46 +08:00
    @Tomorrowxxy 补充一下: 对象需要实现 Countable
    encro
        98
    encro  
       2020-04-02 13:46:26 +08:00   1
    @winterfell30

    因为 PHP 并没有区分字典和数组,
    JSON 序列化和反序列化的时候,是通过判断 index 是不是数字 0 开始来判断字典还是数组。所以你如果将 key 转为非 0 开始,那么它就当成字典了。

    >>> echo json_encode([1=>2,2=>3]);
    {"1":2,"2":3}
    >>> echo json_encode([0=>2,1=>3]);
    [2,3]
    >>> echo json_encode(['0'=>2,'1'=>3]);
    [2,3]
    lepig
        99
    lepig  
       2020-04-02 13:48:39 +08:00
    深有同感 不过目前靠 PHP 吃饭 就这样吧
    crystom
        100
    crystom  
       2020-04-02 13:50:18 +08:00
    @winterfell30 空的时候让 php 转成 (object)[] 再进行 json 编码
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2751 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 11:45 PVG 19:45 LAX 04:45 JFK 07:45
    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