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

我也来吐槽 PHP 最垃圾的地方

  •  
  •   gouchaoer · 2017-10-20 17:09:39 +08:00 · 22182 次点击
    这是一个创建于 2590 天前的主题,其中的信息可能已经有所发展或是发生改变。

    神奇的 array,这种情况很多

    php > $a=[];
    php > echo $a[1];
    PHP Notice:  Undefined offset: 1 in php shell code on line 1
    php > $a=null;
    php > echo $a[1];
    php > $a=4;
    php > echo $a[1];
    
    

    另外最受不了的就是以下的情况,很多时候一个对象可能为空,这个直接抛 Fatal error 退出脚本简直要命,不过这个在 php7 之后似乎改成抛异常了

    php > $o=null;
    php > $o->fun();
    PHP Fatal error:  Call to a member function fun() on a non-object in php shell code on line 1
    PHP Stack trace:
    PHP   1. {main}() php shell code:0
    
    143 条回复    2020-01-31 00:11:21 +08:00
    1  2  
    pangliang
        1
    pangliang  
       2017-10-20 17:17:58 +08:00
    $o->fun(); o 是 null 这句不报错继续执行不是更要命?
    liuguang
        2
    liuguang  
       2017-10-20 17:20:10 +08:00   ❤️ 1
    自己代码问题,还怪 PHP 报错
    cuebyte
        3
    cuebyte  
       2017-10-20 17:23:06 +08:00   ❤️ 1
    @liuguang 对,PHP 没问题,都是辣鸡码农的错。

    这就是解释型语言咯(摊手
    kunluanbudang
        4
    kunluanbudang  
       2017-10-20 17:24:31 +08:00   ❤️ 1
    基本共识了, 语法层面,

    有些东西, PHP 就是与主流语言显得与众不同
    kunluanbudang
        5
    kunluanbudang  
       2017-10-20 17:25:20 +08:00   ❤️ 1
    JS 写起来舒服多了
    HYSS
        6
    HYSS  
       2017-10-20 17:25:49 +08:00
    我觉得你写法肯定有问题 如果一个属性是对象的话 肯定不可能是为空的
    silencefent
        7
    silencefent  
       2017-10-20 17:29:46 +08:00
    语法这个层面其实也没什么,主要还是性能不高
    今天为了新增一个积分数据,涉及关联 6 张表,十几个字段,然后运行更新,限制了 300 条数据都跑出超时(超时时间 300s ),最后 100 条 100 条的改,搞了很久
    Mrun
        8
    Mrun  
       2017-10-20 17:31:49 +08:00
    @silencefent 这个跟性能有什么关系,大概率是 DB 设计的有问题
    2ME
        9
    2ME  
       2017-10-20 17:34:40 +08:00
    array 那个没毛病阿 只是在 array 的情况下给你个提示 只是看着不爽 三次 echo 的结果应该都是一样的

    你可以选择关闭掉 Notice 提示 满足强迫症

    现在的工作是做爬虫和脚本 深有体会 Fatal error 真是要命..
    cdwyd
        10
    cdwyd  
       2017-10-20 17:36:39 +08:00 via Android
    @silencefent
    这个锅 php 肯定不背
    RLib
        11
    RLib  
       2017-10-20 17:38:55 +08:00
    不是 array 隐含转成 array, 是 array 就检查 index, 合乎情理...
    gouchaoer
        12
    gouchaoer  
    OP
       2017-10-20 17:42:44 +08:00
    @2ME 都说了这个在 php7 下不会 Fatal error 改抛异常了,我建议你把你爬虫随便找一个 web 框架的 console 中跑,一般 web 框架 hook 了 warning 啥的变成异常,catch 起来很简单那
    gouchaoer
        13
    gouchaoer  
    OP
       2017-10-20 17:43:49 +08:00
    @kunluanbudang 50 步笑 100 步,脚本语言里面每一个好东西
    zhs227
        14
    zhs227  
       2017-10-20 17:55:35 +08:00
    @silencefent 相对于数据库操作的时间,php 脚本的逻辑执行时间少得可怜。你说的这种情况用其它语言速度可能也快不到哪里去。

    对于费时的操作可以使用 phpcli 运行,防止超时造成数据丢失或者重复,慢点就慢点。容器配置了脚本都有超时时间是相对于其它语言的一大特色
    crabRunning
        15
    crabRunning  
       2017-10-20 17:57:17 +08:00   ❤️ 1
    ```
    let a = null;
    typeof null === 'object';
    a.test // fuck
    ```
    fcten
        16
    fcten  
       2017-10-20 18:20:06 +08:00
    某一楼已经充分表明了 PHP 的巨大优势——门槛低
    yxn1910
        17
    yxn1910  
       2017-10-20 18:27:02 +08:00
    虽然黑 PHP 是政治正确,但是似乎大家都没有黑到点上。。。失望。。。
    misaka19000
        18
    misaka19000  
       2017-10-20 18:31:03 +08:00 via Android
    楼主竟然敢黑 PHP,真是胆大包天
    pqee
        19
    pqee  
       2017-10-20 18:39:41 +08:00   ❤️ 2
    七楼建议退出 PHP 届。
    十七楼说得对!
    WuwuGin
        20
    WuwuGin  
       2017-10-20 18:39:48 +08:00 via Android
    等于说 7 楼这货是怎么能说 PHP 性能差的,赶快在表结构逻辑不变的情况下展示一下其他语言的性能。
    zonghua
        21
    zonghua  
       2017-10-20 19:23:36 +08:00 via iPhone
    @WuwuGin 就发动一次查询的话,那都是数据库的问题
    sagaxu
        22
    sagaxu  
       2017-10-20 20:07:58 +08:00 via Android
    槽点再多不还是得捏着鼻子用?毕竟其它语言入门要麻烦好多
    onlyhot
        23
    onlyhot  
       2017-10-20 20:10:29 +08:00 via iPhone
    @yxn1910 其实这就是黑到点子上了啊。用 php 的人都这么 xx
    Trim21
        24
    Trim21  
       2017-10-20 20:14:48 +08:00 via iPhone
    @onlyhot 别跟 zz 一样开地图炮,要讨论就好好讨论
    kn007
        25
    kn007  
       2017-10-20 20:21:32 +08:00
    就异常抛出解决这块,貌似 python 比 php 好。。刚入门 python 的感觉,感觉后续也有很多坑。。

    php,第二点感觉没多大毛病。。第一点有点。。。
    ZXCDFGTYU
        26
    ZXCDFGTYU  
       2017-10-20 20:21:48 +08:00
    各取所长就好了,成天你垃圾我牛逼的,有意思?
    ZXCDFGTYU
        27
    ZXCDFGTYU  
       2017-10-20 20:27:04 +08:00
    有些需求 php 做不来或者有更好的其他语言实现那就哪个好使就用哪个,有些东西用 php 做合适那就 php 呗,不明白成天为了所谓的 php 是垃圾还是牛逼这种毛用没用的小学生问题成天吵有什么意思?

    利益相关:2 年 PHP,为了工作更高效目前在学运维和 python。
    onlyhot
        28
    onlyhot  
       2017-10-20 20:34:09 +08:00
    @Trim21 我也是写 PHP 的 ,你开心吗? 这帖子是用来讨论的?
    cxbig
        29
    cxbig  
       2017-10-20 20:49:49 +08:00
    代码偷工减料,却抱怨语言对错误或异常处理不够干净。。。
    heynumber
        30
    heynumber  
       2017-10-20 21:24:55 +08:00
    @cxbig +1 ,lz 代码偷工减料,估计连防御式编程都不知道,哪怕借鉴一下。
    torbrowserbridge
        31
    torbrowserbridge  
       2017-10-20 21:26:18 +08:00 via Android
    学艺不精怪语言哈哈哈,脸皮真厚。
    bucky
        32
    bucky  
       2017-10-20 21:34:47 +08:00
    php 这语言里要使用那么多奇怪的符号,看着就恶心
    mcfog
        33
    mcfog  
       2017-10-20 21:35:31 +08:00
    @cxbig 他抱怨的不是处理不够干净而是不能写得更脏……
    abcbuzhiming
        34
    abcbuzhiming  
       2017-10-20 21:37:40 +08:00
    @kunluanbudang 啥? js ?我们要不要讨论一下各种 js 空和未定义的区别?大哥笑二哥
    wdlth
        35
    wdlth  
       2017-10-20 21:38:41 +08:00
    抛异常也不是一个好的解决方法,为空的话下面的业务能正常继续么?
    abscon
        36
    abscon  
       2017-10-20 21:47:35 +08:00 via iPhone
    @bucky 建议写一写 perl,就会原谅 PHP 了
    fox0001
        37
    fox0001  
       2017-10-20 22:26:17 +08:00
    @abscon #36 我宁愿写汇编也不写 Perl,太恐怖了
    byfar
        38
    byfar  
       2017-10-20 22:31:29 +08:00
    异常: 当然是选择原谅他
    cncqw
        39
    cncqw  
       2017-10-20 22:53:55 +08:00
    @bucky 哪里恶心了?起手就是一个$,一看就有钱。
    cncqw
        40
    cncqw  
       2017-10-20 22:57:40 +08:00
    @silencefent 你这个黑的太低端了,明明是数据库的锅都能怪到 php 头上,你换个别的语言操作还不是一样,关联 6 张表不卡出翔才怪。一般黑 php 的估计都是自己水平不咋地,遇到问题就抱怨语言不好,真正的大牛早就闷声发大财了。
    feiyuanqiu
        41
    feiyuanqiu  
       2017-10-20 23:03:39 +08:00
    @cncqw 命名空间的反斜线简直要了人的命,难以想象究竟是多扭曲的人决定采用这个丑陋的符号
    gouchaoer
        42
    gouchaoer  
    OP
       2017-10-20 23:19:18 +08:00 via Android
    @ZXCDFGTYU 我很讨厌你这种任何技术都有其优点的论调啊,垃圾就是垃圾,还骂不得了啊?
    gouchaoer
        43
    gouchaoer  
    OP
       2017-10-20 23:28:02 +08:00 via Android
    @ZXCDFGTYU 运维自动化用 php 写比 py 写爽太多了,原因有三点:第一 array 太 jb 好用了,第二标准函数太 jb 好用了,第三 py 语法太恶心了

    @feiyuanqiu 名称空间分隔用\不是拍脑袋想出来的,跟 windows 用\做路径分隔一样。。。本质原因是当初.被用了拼接字符串没用+号

    至于吐槽$号的,还有 php 语法奇怪的,我可以告诉你们其实 php 语法非常非常规矩,很像 java/c,不作
    dobelee
        44
    dobelee  
       2017-10-20 23:32:05 +08:00 via Android
    看到那么多不入流的码农我就放心啦。
    lgpqdwjh
        45
    lgpqdwjh  
       2017-10-20 23:44:17 +08:00
    看到有人装 b 我就放心了
    caola
        46
    caola  
       2017-10-20 23:52:52 +08:00
    @gouchaoer 明明是楼主你自己的问题,说是 php 有问题,真是可笑。看来是没看过手册吧?
    jfcherng
        47
    jfcherng  
       2017-10-20 23:59:52 +08:00
    msg7086
        48
    msg7086  
       2017-10-21 03:48:11 +08:00   ❤️ 1
    你知道为什么 PHP 那么多东西都莫名其妙用的 Warning Error Fatal 而不是异常吗?



    因为 PHP 初期根本就没异常这东西……

    类和对象在 PHP 4.x 就有了,而异常呢? PHP 5 才有。

    所以这也不能算是最辣鸡的地方,因为异常是语言特性,而 PHP 才刚刚支持没多久。
    在语言逐渐发展过程中,会慢慢修正原先的设计路线,加入新特性的。
    askfilm
        49
    askfilm  
       2017-10-21 07:16:54 +08:00   ❤️ 1
    学艺不精怪语言 +1
    simaguo
        50
    simaguo  
       2017-10-21 08:40:10 +08:00
    看到还有人黑 php,我就放心了
    rozbo
        51
    rozbo  
       2017-10-21 09:08:06 +08:00
    你们应该黑不支持多线程,不支持常驻
    skyjerry
        52
    skyjerry  
       2017-10-21 09:52:18 +08:00 via iPhone
    @rozbo 我们有 swoole(逃
    meanmachine
        53
    meanmachine  
       2017-10-21 10:01:36 +08:00 via Android
    @skyjerry swoole 现在也不能线程了
    iyaozhen
        54
    iyaozhen  
       2017-10-21 10:07:03 +08:00 via Android
    @rozbo 你还是没黑到点上,多线程这个对。常驻内存这个是 CGI 的运行方式决定的。你也可以 php server.php 自己监听端口,但是一般不这样做。
    fengh0409
        55
    fengh0409  
       2017-10-21 10:18:12 +08:00
    觉得垃圾你就不用啊,在这里拉仇恨显得你很牛逼?
    yuanchao
        56
    yuanchao  
       2017-10-21 10:35:12 +08:00
    每次看到有黑 PHP 的帖子我都点进来看~~
    yuanchao
        57
    yuanchao  
       2017-10-21 10:35:33 +08:00
    可惜都没黑到点上。。。
    lianz
        58
    lianz  
       2017-10-21 10:55:46 +08:00
    @silencefent 智商感人。超时问题,如果是 PHP 本身运行速度问题,那得起码有上千万行的代码才可能跑出超时啊。如果是数据库访问速度问题,那换别的任何语言一样慢。
    killerv
        59
    killerv  
       2017-10-21 11:39:44 +08:00
    @silencefent 你这个 100%是数据库的问题( sql 或者数据库本身)
    linxl
        60
    linxl  
       2017-10-21 11:54:59 +08:00
    似乎吐槽 php 能获得优越感.
    cyzhu
        61
    cyzhu  
       2017-10-21 12:19:43 +08:00
    有这功夫学会新语言,或者加入 php 核心开发组。有句话叫:要么忍,要么.
    voocel
        62
    voocel  
       2017-10-21 12:24:12 +08:00 via Android
    看了这些评论,我就放心了
    rashawn
        63
    rashawn  
       2017-10-21 12:37:08 +08:00 via iPhone
    @WuwuGin 可能 7 楼用的数据库是拿 PHP 写的…
    ahkxhyl
        64
    ahkxhyl  
       2017-10-21 13:26:17 +08:00
    自己的锅 自己背
    aksoft
        65
    aksoft  
       2017-10-21 13:51:50 +08:00
    用着人家的东西,说人家垃圾?
    rozbo
        66
    rozbo  
       2017-10-21 14:55:07 +08:00
    @iyaozhen 你这就想当然了,php server.php 你试过吗?单线程的 php 的如何解决多个用户并发的问题?
    除非你用 swoole 来解决,但 swoole 不就是为了填 php 的坑吗。
    agui2200
        67
    agui2200  
       2017-10-21 15:27:37 +08:00
    (手动斜眼 :) 然而 go 早已看穿一切,swoole 真的好用么?看他的文档就知道了
    lianz
        68
    lianz  
       2017-10-21 16:23:56 +08:00
    @agui2200 除了那种 70 年代的风格之外,go 真是好东西
    s2722357
        69
    s2722357  
       2017-10-21 16:46:30 +08:00   ❤️ 1
    这么了垃圾的语言,你还用,找一个不垃圾的多好,或者自己开发一门语言, python 好像就这么出来的吧,加油,我看好你
    agui2200
        70
    agui2200  
       2017-10-21 17:35:49 +08:00
    @lianz 风格我觉得还可以,最起码“魔力”没那么强
    laoma
        71
    laoma  
       2017-10-21 19:50:08 +08:00 via Android
    恕我直言,只有半路出家的码农才用 php 和 python 和 js 等辣鸡需要。。
    laoma
        72
    laoma  
       2017-10-21 19:50:28 +08:00 via Android
    语言
    printempw
        73
    printempw  
       2017-10-21 22:47:00 +08:00 via Android
    真希望能看到一点对 PHP 的有水平的批评啊😑

    但总是事与愿违 :P
    cncqw
        74
    cncqw  
       2017-10-21 23:29:18 +08:00
    @feiyuanqiu 命名空间格式是可以自定义的,且没有强制要求必须使用,凭自己想当然有意思?
    humpy
        75
    humpy  
       2017-10-21 23:48:39 +08:00   ❤️ 4
    @gouchaoer
    语法像 c 是因为它最开始就是作为封装了一批 c 函数专用于做网页的 dsl 出现的,像 java 是因为 php5 就是照着 java 抄的

    php 在语法设计上始终让人感觉设计师没上心,一种凑合凑合能用就行的样子。背着一堆历史包袱舍不得丢,为了新特性又引入另一些奇奇怪怪的符号,整个语言给人一种不统一不协调的感觉
    比如上面说的反斜线,你见过其他哪个主流语言用过这符号吗?没人用是因为它真的难看,感受一下:
    java: com.v2ex.php.Someone.doSth()
    c++: v2ex::php::Someone::doSth()
    php:\V2ex\Php\Someone::doSth()

    再比如变量声明,c 系语言采用类型在变量前面的声明语法:int i; 相应的,函数的返回类型也放在声明的前面:int do_sth(int i);这在语法上是一致的
    go/rust/kotlin 等采用类型在变量后面的声明语法:var i int ;函数的返回类型也放在函数声明的最后 func doSth(i int) int; 它们在语法上也是一致的
    php 是怎么做的呢?函数形参,类型在参数名称前;函数返回类型,又放在函数最后,还用一个冒号隔开:function doSth(int i): int,这当然不影响使用,但是真是不舒服啊

    再去看看 php.net/rfc 里面的提案,更多乱七八糟的符号在排队申请加入 php。由于 @ 被用来当错误抑制符了,[]数组在用,<>估计想留给泛型,注解的支持者们提出的注解语法是什么呢?<< annotation >>,还是从 hack 那抄的

    php7 增强了类型,但又不做全,想知道类属性的类型只能靠程序员自觉写 docblock,想做接口文档自动生成、json 反序列化为具体类型麻烦得要死

    数组太“强大”,程序员们干什么都喜欢用数组,它什么都能装,完全不同的东西也可以装在一起,不到运行时根本不知道里面都装了些啥,IDE 无法索引推导,无法代码提示,无法一键重构;自动化工具通过反射得不到数组项类型,无法生成靠谱的文档、无法有效的代码检查;使用时各种 isset、各种 assert,防止非预期的数组值,想必这些丑陋的数组项检查代码不陌生吧? if (isset($array[$key]) && ($array[$key] || $array[$key] == 0))) {}

    一些很有用的基础语法(比如 enum、泛型)不添加,东抄一个 trait,西抄一个 yield,使用场景还很有限

    语言 sdk 全是 c 实现,没有官方的代码库可以作为代码风格范例,长时间代码风格都是乱七八糟的,接触的程序员里就属 php 的代码风格最不羁;更不要说标准库里各种函数命名、参数命名、参数位置不规范不统一的问题了

    而关于语言未来的发展,官方一直不给出一个明确的 roadmap,rfc 里的提案又乌烟瘴气乱七八糟,这个语言对未来的规划是怎样?它准备改进哪些方面、考虑加入哪些特性,它对自己的定位是什么?它是否考虑过目前存在的项目变大变复杂就要更换语言技术栈的情况?怎么面对 java、go 在日渐流行的微服务化潮流中带来的挑战?



    睡觉
    9999999999999999
        76
    9999999999999999  
       2017-10-22 00:58:52 +08:00
    建议睡觉
    gouchaoer
        77
    gouchaoer  
    OP
       2017-10-22 02:41:46 +08:00 via Android
    @humpy 你吐槽这么厉害,我可以解释一部分问题,namespace 用\是因为.被用来拼接字符串,为啥不用+呢?因为脚本语言+默认会转成 int,而.则是 string,你去看 namespace 的 rfc 可以看到官方态度是实用不考虑好不好看。至于语法抄 c/java 我很喜欢,我特别讨厌那种标新立异然而没有暖用的语法比如 go/Python。

    php7 加入 typehint 的标量类型不给类属性类型很简单,因为他是脚本语言,给函数参数限定类型已经是极限了;至于返回值放后面,那是因为 function 关键字在前面,放后面前面无所谓吧。。。其实我很喜欢 php 社区的 3 个风格,第一是实用性,不搞标新立异也不去追求 cool 的东西,一切为了实用,抄 java 规规矩矩的很好;第二是兼容精神,追求性能。。。社区无法给出 roadmap 很简单,因为核心开发就那几个,很多 feature 都是社区 rfc 大家提投票来的,php7 的主要有 dmitry、nikita 和鸟哥搞出来,现在他们在搞 jit,短时间内 php 的语法 feature 不会有太大变动。
    gouchaoer
        78
    gouchaoer  
    OP
       2017-10-22 02:45:59 +08:00 via Android
    如果泛型都加了那就是 hack 了,不是脚本语言了,说到底就我的理解,我希望 php 保持这个状态,规规矩矩的做好自己的事情就 ok 了,不要有太大野心
    jfcherng
        79
    jfcherng  
       2017-10-22 02:57:25 +08:00
    到底為什麼當初字串拼接選擇使用 . 符號呢
    msg7086
        80
    msg7086  
       2017-10-22 05:43:37 +08:00
    @gouchaoer 虽然你说的我们都懂,但是有时候还是会说一句……

    「这代码真™难看啊!」

    就像你拍 Cosplay,拍一个美少女 JK 和拍个 Feng 姐,你选哪个?

    何况说 PHP 实用的我也要打个问号,实用性和别的语言比能高到哪里去。

    #↑ @jfcherng 如果一定一定要找个原因的话,那就是 PHP 最开始并没有面向对象的概念。
    KevinM
        81
    KevinM  
       2017-10-22 08:18:10 +08:00
    @gouchaoer 有一句講一句,+ . 這個純粹就是當初 . 用掉了現在沒法改而已,關腳本語言甚麼事情?+ . 默認做不做 implicit conversion 不過語言設計上的事情。
    gouchaoer
        82
    gouchaoer  
    OP
       2017-10-22 09:50:57 +08:00 via Android
    @KevinM 那你说说+被用来加 int 了,string 拼接用啥符号?难道也用+然后看第一个操作数是 int 还是 string 么?这不可能,因为很多时候你不知道那到底是 int 还是 string,就跟"0"是 empty 一样,咋一看很脏,但实际用起来就觉得顺手
    gouchaoer
        83
    gouchaoer  
    OP
       2017-10-22 09:56:31 +08:00 via Android
    @msg7086 可以自己拌?
    实用性是 php 的很大特点,很多 feature 都是需求催生出来的,php 也会加进去。。。比如独特的 php-fpm 机制,比如啥 safe_mod、global_magic_quote、extract、user_dir 这些失败 feature,你可以看到为了解决问题 php 在不停的尝试,而不是告诉用户你该怎么怎么做
    qqfs
        84
    qqfs  
       2017-10-22 10:31:14 +08:00
    mmp 想试试 php -a,发现 windows 版 php 根本不支持
    lulin
        85
    lulin  
       2017-10-22 10:47:49 +08:00
    -。- 哈哈

    javascript -> typescript

    严格 null 和 any

    // 声明下类型
    let arr: string[] = []
    // 正常
    arr[0] = '0'
    // 提示 number -> string warn
    arr[1] = 0
    // 提示 string is not assignable to number
    const result: number = arr[2] + 1
    // 提示 string 没有 test
    arr[3].test

    =.= 我如果说 JS 是最好的语言,你们怎么看~
    weilongs
        86
    weilongs  
       2017-10-22 10:54:28 +08:00
    @laoma 怪不得市面上用的多.都是半路出家的公司要的半路出家的人.
    lulin
        87
    lulin  
       2017-10-22 11:01:57 +08:00
    @laoma 不好意思,我用 JS 得罪大佬了~请问大佬用什么?
    msg7086
        88
    msg7086  
       2017-10-22 11:10:24 +08:00
    @gouchaoer 不停地尝试并不能解决问题。
    这种尝试的代价是很大的。(比如 Python 是最好的两个语言?)

    比如说写个程序,你可以尝试,因为大不了 git checkout HEAD~1。
    但是语言的尝试是永久生效的,而且一旦要 revert 必然要被人围殴(程:MMP 怎么又不向后兼容了?)
    这里 +和. 的占用直接导致了难看的反斜杠语法。
    其实还不止这一处。想想 :: 和 -> 之分?

    $deletedRows = App\Flight::where('active', 0)->delete();

    哇塞我的氪金狗眼……
    sagaxu
        89
    sagaxu  
       2017-10-22 11:14:41 +08:00
    @gouchaoer “因为脚本语言+默认会转成 int ” ?可能 Python 和 JavaScript 都不算脚本语言吧。
    PHP 如果保持现在这个状态,很可能会越来越小众,最近一两年 PHP 市场萎缩很明显,转 Java 转 Go 的非常多。
    String 拼接和 int 相加都用+,遇到 string + int,可以把 int 转为 string,或者干脆禁止 string 和 int 相加

    @humpy PHP 语法本身就是东拼西凑的,缺乏整体设计和一致性,大公司现在在这个领域宁可选 node 也不用 php


    预言先放这里,未来三到五年,PHP 转 Java 转 Go 转 Node 的会很多,三年后来看吧。
    sagaxu
        90
    sagaxu  
       2017-10-22 11:27:39 +08:00
    @msg7086 在语言设计上不断试错,那也是无奈之举,PHP 背后缺乏大公司的推动,好不容易有个 facebook,却跟社区分道扬镳了
    msg7086
        91
    msg7086  
       2017-10-22 11:28:30 +08:00
    safemod 禁用了一堆函数导致各种 app 炸穿还要逼得用户把选项关掉。
    自动 quote 惯坏了一堆新手还顺便给老手带来了二次 quote 的问题,还让查询拼接大法阴魂不散。
    extract 污染本地变量。
    user_dir 什么鬼东西就不提了。

    PHP 所做的尝试在我看来,就是一个不懂得怎么设计语言的人,左一棒子,右一棒子,然后偷偷看一眼用户心态崩了没?

    一个简单的猜测:
    Perl 设计者 Larry Wall -- UCB 研究生院毕业。
    Python 设计者 Guido van Rossum -- 阿姆斯特丹大学数学和计算机科学硕士学位。
    Ruby 设计者 松本行弘 -- 島根大学大学院博士課程単位取得退学。
    PHP 设计者 Rasmus Lerdorf -- 滑铁卢大学系统设计工程应用科学学士学位。
    msg7086
        92
    msg7086  
       2017-10-22 11:31:14 +08:00
    @sagaxu PHP 语言中,隐式自动转换算是他家最大的特点之一,string 和 int 是可以无缝互转的,所以不存在只用一个运算符实现两种能隐式转换类型相加和相连接的方法。
    askfilm
        93
    askfilm  
       2017-10-22 11:31:48 +08:00
    @sagaxu
    1. 大公司用 php 的多的是,国内国外都有很多, 你那句话有问题! 另外 php 的全球 web 方向的份额依然是最高的。
    2. 大部分的语言都是互相借鉴的, 也就所谓的东拼西凑。
    3. 最近一两年 PHP 市场萎缩很明显, 最近一两年中小型公司倒的比较多, 中小企业对 php 的需求比较大; 然而这 2 年其他语言的市场也不见得能好不到哪去, 大环境使然。
    4. lnmp 依然是开发 web 的最佳方案, 但是从业员的平均技能基础较差,这是事实。 所以我们用开发框架来提高门槛, 我们这边要求开发者要会 symfony , 想招差的都挺难。
    wdlth
        94
    wdlth  
       2017-10-22 11:37:27 +08:00
    @msg7086 C 和 C++ 的那堆:: . -> <> * & …也很难看,但这就是语言,靠简单的符号实现复杂的东西。
    msg7086
        95
    msg7086  
       2017-10-22 11:52:44 +08:00
    @wdlth 是挺难看的,所以你看有多少人是自愿去用 C/C++的。
    还不是被性能或者运行环境逼着去用的。
    但是 PHP 就不一样了,没硬性条件逼着你去用,所以不是刚需。
    sagaxu
        96
    sagaxu  
       2017-10-22 12:05:50 +08:00
    @msg7086 这种 string to int 的隐式转换正是 PHP 最大的缺陷,坏到根上了,太多的 bug 是因为这个引起的了。
    @msg7086 PHP 在学历构成上太吃亏了,用户普遍学历低,核心团队也不像别人家语言那样遍地名校硕士以上。

    @askfilm 都很多? 国外 facebook 已经是 hack 语言了,没 php 的事。FLAG 里其它几家都不用 php。国内阿里巴巴也彻底不用 php 了,php 业务全部迁移到 node 了,阿里的标签是 Java。腾讯和百度的标签是 C++,其次是 Java。几个后起之秀,携程京东等等,也都是 Java 和 C++。

    全球 web 方向的份额? 光 wordpress 就是垄断大部分 web 网站了。但是 wp 的流行能贡献多少职位?

    你自己也这么说“中小企业对 php 的需求比较大”,为何中小企业长大之后就要对 PHP 需求比较小了?

    lnmp 依然是开发 web 的最佳方案?在 2017 年看来,php 在这方面其实优势不大了。只要够熟悉,用 python+django/flask 或者 Java + springboot,只输出 json,页面完全交给前端,开发效率上并没有太大的差别。过去 php 的优势比较大,只是他内置模板能力太强,现在不输出页面只输出 json 了,这个优势就不存在了。

    如果业务稍微大一点,Java 可以平滑的升级到 springcloud,而 php 这边并没有能相提并论的开源设施。公司规模稍大一些,就需要大数据和机器学习的应用了,前者是 Java 的天下,后者是 Python 做原型 C++做产品。

    php 越来越符合自己的定位了,安安静静的做个吐页面的那一层,最多加一点简单的 CRUD,服务还是交给静态类型语言去做吧。

    为什么 php 从业人员基础普遍不好?因为 php 主要是做 web 的。其实 Java 做 web 的基础也差,基础不差的,有几个人心甘情愿一直做 web 啊?
    wdlth
        97
    wdlth  
       2017-10-22 12:09:29 +08:00
    @msg7086 招到人也算是刚需吧,Golang 也好,Erlang 也好,招到玩得好的人难,需要从别的开发语言转过去。所以市场上还是一堆 C/C++、Java、PHP。
    sagaxu
        98
    sagaxu  
       2017-10-22 12:13:53 +08:00
    @wdlth 招 Java 或者 C++的,转 Golang 很容易,我司招 Kotlin 的时候招的是 Java 的
    askfilm
        99
    askfilm  
       2017-10-22 12:18:41 +08:00
    @sagaxu php 的优势比较大,不是他内置模板能力强, 是他高效, 简单的讲就是花更少的钱,能做出更多的东西.
    你也只能从技术的眼光来看东西 .... 还有根据你说法可知你并不真正了解 php, 说的都是一些 php 初学者的话
    wdlth
        100
    wdlth  
       2017-10-22 12:19:45 +08:00
    @sagaxu 看来 Rasmus Lerdorf 也得学马云了,他人生中最大的错误是创造了 PHP,他明明是想做个小页面而已,但现在 PHP 彻底改变了他的生活……
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 22:50 · PVG 06:50 · LAX 14:50 · JFK 17:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.