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

PHP 越来越靠近编译型语言了

  •  
  •   fxjson · 2020-12-25 22:22:02 +08:00 · 9410 次点击
    这是一个创建于 1435 天前的主题,其中的信息可能已经有所发展或是发生改变。

    php7,8 支持变量类型约束了,开源框架也都在慢慢引入类型约束,感觉之前 php 的优势就是简单,快速开发,引入变量约束,四不像的感觉

    89 条回复    2021-01-01 12:12:43 +08:00
    coolesting
        1
    coolesting  
       2020-12-25 23:09:16 +08:00 via Android
    后期肯定要变得肿涨,转 nodejs 吧。
    特别是那框架,一个个都模仿 ROR,更加怪异。
    sagaxu
        2
    sagaxu  
       2020-12-25 23:28:45 +08:00 via Android
    动态一时爽
    learningman
        3
    learningman  
       2020-12-25 23:32:58 +08:00
    @sagaxu GC 火葬场
    ferock
        4
    ferock  
       2020-12-25 23:35:27 +08:00 via iPhone
    再不转型,就毫无优势了
    cmdOptionKana
        5
    cmdOptionKana  
       2020-12-25 23:39:55 +08:00   ❤️ 5
    js 是命好,才有微软这个级别的公司给它搞一个 typescript, 而 PHP 现在不受宠了,只能自己引入类型约束。

    事实上在现代化 IDE 的加持之下,类型约束并不会影响快速开发,又方便了重构,利大于敝。
    Mac
        6
    Mac  
       2020-12-25 23:41:53 +08:00   ❤️ 3
    引入有什么不好么?你照样可以用之前的特性继续做快速开发呀。
    aofall
        7
    aofall  
       2020-12-26 00:16:39 +08:00
    就目前来说还不是强制要求的,虽然说弱类型可以快速开发之前是它的优势
    但一门语言是要考虑自己未来的发展的,相比其他语言来说 PHP 的性能目前还是一个需要优化的问题。

    快速开发->能用+上线+修 Bug->发展面临性能不足的问题->优化->还是不足->换其他语言重构

    如果最后因性能不足或者功能缺陷导致被重构抛弃,那 PHP 这门语言是不是也丧失了他的地位?

    其实在 OPCache 的引入之后就已经在往相关的方向靠拢了,个人感觉 PHP 社区目前饼画的还行,就看后期他们能不能推出让人惊艳的版本了,比如支持多线程和内存常驻(不包括 Swoole )
    aofall
        8
    aofall  
       2020-12-26 00:18:32 +08:00
    #7 引入强类型可以让性能变得更好的情况下,可以一定程度的缓解“换其他语言重构”的结局。
    anguiao
        9
    anguiao  
       2020-12-26 00:35:20 +08:00
    我对动态类型完全没好感,甚至连“一时爽”的感觉都没有。
    主要还是 IDE 用惯了,没有完善的代码补全,写起来真的很难受,完善的代码补全可以大大降低我查文档的次数。
    sn01615
        10
    sn01615  
       2020-12-26 00:39:06 +08:00 via Android
    其实我不想约束类型的,都是 IDE 逼的
    hantsy
        11
    hantsy  
       2020-12-26 00:48:00 +08:00   ❤️ 1
    很多年前的 PHP 5.x 就开始 OOP 了吧,5.6 已经具备成熟的 OOP 语言特性。

    https://github.com/hantsy/angularjs-zf2-sample

    8.0 支持 Union Type,PatternMatching 等比较潮流的特性。但是一些基础的东西,PHP 应该补充,比如 Java Collections 对应的。

    OOP 编程基本上用 Symfony,Doctrine 和 Java 开发效率差别不大了。
    hantsy
        12
    hantsy  
       2020-12-26 00:51:10 +08:00
    如果没有强类型约束,后期维护太难了。
    MengiNo
        13
    MengiNo  
       2020-12-26 00:53:55 +08:00
    快速开发感觉是个悖论。当你选择想开发速度妥协的时候,就意味着这个项目的最终归宿就是 shit mountain 。虽然绝大多数人都知道这是饮鸩止渴,但是毒发的速度永远是超过预期的。大家都想后期换语言重构什么的,但往往是还没坚持到后期,自己就把自己搞得非常难以维护最终拖死了。
    MengiNo
        14
    MengiNo  
       2020-12-26 00:55:49 +08:00
    毕竟都 2021 年了,idea + demo 甚至 idea + ppt 就能融到钱的故事早就被写到历史书里了。
    hantsy
        15
    hantsy  
       2020-12-26 00:57:12 +08:00
    PHP 社区比较扯淡,主要是个人参与,这点与 Java 太不一样。

    PSR 这一套出规范的机制,好不容易抄袭了 Java 的 JSR,将一些基础的东西全部标准化了,缓解 PHP 各项目一盘散沙的书面。

    现在摆停了。
    hantsy
        16
    hantsy  
       2020-12-26 01:01:11 +08:00   ❤️ 1
    @MengiNo 跟开发团队有关,跟语言无关,Java 见过太多的项目也一样。做为开发人员,有时心理想做好,无力回天,SB 公司,SB 管理,加上遇到一些巨婴共事。

    开始求快,后面一锅粥,天天折东墙补西墙。
    hantsy
        17
    hantsy  
       2020-12-26 01:05:18 +08:00
    @coolesting 要说模仿 ROR 的 PHP 框架,CakePHP 应该是的。https://github.com/hantsy/angularjs-cakephp-sample

    ZF2, Symfony, Doctrine 几乎把 Java 的一套全部搬过去了。

    * EIP
    * Spring
    * Hibernate

    有这些基础,写 Symfony 很容易。
    hantsy
        18
    hantsy  
       2020-12-26 01:08:20 +08:00
    不知不觉,发现好多年没写 PHP 了。 过几天写个 Symfony 程序玩玩。
    hantsy
        19
    hantsy  
       2020-12-26 01:10:37 +08:00
    对了,PHP 8 还有内置 Attribute,不用再用 Doctrine 的 Annotations 了。
    hantsy
        20
    hantsy  
       2020-12-26 01:15:49 +08:00
    除了 Symfony 适合大型程序 Module 形式的开发外,一些轻量的也开始流行了。比较典型是 Slim 这种,有 Vertx 的风格,开发比较自由,代码组织全靠自己。
    https://github.com/slimphp/Slim
    nthhdy
        21
    nthhdy  
       2020-12-26 03:11:40 +08:00
    @ferock 想想。。转型之后,优势在哪
    RickyC
        22
    RickyC  
       2020-12-26 06:50:58 +08:00
    @ferock PHP 的优势不是学习成本低吗?
    jtsai
        23
    jtsai  
       2020-12-26 07:23:52 +08:00 via iPhone
    趋势 node python 都引入
    ericgui
        24
    ericgui  
       2020-12-26 07:43:52 +08:00
    连 javascript 已经是一个事实上的编译型语言了
    fenglangjuxu
        25
    fenglangjuxu  
       2020-12-26 07:47:28 +08:00 via iPhone
    我也觉得四不像了 要是严格数据类型 用 go 就行了 像别人靠近 逐渐丢失了自己
    cmdOptionKana
        26
    cmdOptionKana  
       2020-12-26 08:44:01 +08:00
    @RickyC 自从有了 Go, 学习成本比 PHP 更低,没有 OOP,没有泛型,语言特性比谁都少。
    cokyhe
        27
    cokyhe  
       2020-12-26 08:46:09 +08:00
    go 的优势是没有那么多语法糖,读别人的代码特容易
    shiji
        28
    shiji  
       2020-12-26 08:46:58 +08:00 via iPhone
    php 的 enum 还不知道什么时候能实现
    zjsxwc
        29
    zjsxwc  
       2020-12-26 08:50:58 +08:00
    在 php5.x 时代,使用 PHPStan,然后 level 拉到 8,PHPDoc 来声明类型,就已经是完全强类型的 php 了。
    XIVN1987
        31
    XIVN1987  
       2020-12-26 09:12:07 +08:00
    @cmdOptionKana
    你说反了吧,,微软搞 typescript 这是在给 js 挖坟啊
    你看现在知乎上关于 js 和 ts 的问题下面,,大量的回答都是夸 ts 贬 js 的,都是劝退 js 劝进 ts 的,搞得好像用 js 就落伍了似的,,要是真被他们搞成了就没人用 js 了,,
    sagaxu
        32
    sagaxu  
       2020-12-26 09:50:36 +08:00 via Android   ❤️ 1
    @hantsy php 太过草根化,从初创到后期,鲜有名校毕业的贡献者。Java 圈不同,光世界第一梯队大学的 phd 贡献者,双手双脚都数不过来。

    如今千人以上的大厂,大都不会考虑 PHP 了,用 PHP 也就是搞搞管理后台。

    学界不爱,业界不香,能有今天的成就,PHP 已是逆袭成功的典范。

    可以预期的是,php 还会活跃在初创企业和个人站长圈里,但前景是越来越差,提供不了有效职位。就算全世界 90%的网站都用 PHP,那些 cms 产业链能招几个人?
    putaozhenhaochi
        33
    putaozhenhaochi  
       2020-12-26 10:10:38 +08:00
    @hantsy 模仿最典型的不应该是 Laravel 吗
    alexkkaa
        34
    alexkkaa  
       2020-12-26 10:17:39 +08:00 via Android   ❤️ 2
    Php 有他的市场 而且就算 java 死了他都不会死。

    前几年 app 火热的时候 php 式微,但是随着最近 app 饱和市场成本急剧上升,无数僵尸应用躺在那, 现在流行的微信小程序就还把以前的网站搬到微信上。为什么他能火, 因为 90%的应用都没必要专门写成一个 app , 网页完全够用。 这些微信小程序有几个后台绝大多数都是 php 没人发对吧?

    这种强类型是脚本语言进化必须的, 既有动态语言的便利又有静态语言的严谨这不好吗?
    ferock
        35
    ferock  
       2020-12-26 10:23:48 +08:00 via iPhone
    @nthhdy #21

    看看求职市场,基本没啥优势了
    hantsy
        36
    hantsy  
       2020-12-26 10:27:55 +08:00
    @shiji 有第三方的。
    hantsy
        37
    hantsy  
       2020-12-26 10:28:31 +08:00   ❤️ 1
    @RickyC 是的,非常低。
    hantsy
        38
    hantsy  
       2020-12-26 10:30:24 +08:00
    @putaozhenhaochi Laravel,Cg 应该都没有 Cake 像,Cake 是命名,项目结构都是很像。Laravel 只是 CodeGen 做的不错,内核 还是用 Symfony Kernel 。
    hantsy
        39
    hantsy  
       2020-12-26 10:33:33 +08:00
    @sagaxu 草根也有好处,没有那么条条框框,感觉它在语言层面的进化速度比 Java,C#快多了。现在反而感觉 PHP 语言部分比 Java 还丰富,工具类库不行,标准化力度不够。
    kikyous
        40
    kikyous  
       2020-12-26 10:34:47 +08:00 via Android
    @alexkkaa 我反对,php 最大的保有盘在 wordpress, 小程序后台用 php 的应该不多
    hantsy
        41
    hantsy  
       2020-12-26 10:37:08 +08:00
    @alexkkaa 现在写 PHP 完全可以 OOP 化,原来的 Function 也就是填填空了。
    printhello
        42
    printhello  
       2020-12-26 10:46:24 +08:00
    不挣扎凉的更快
    wmwmajie
        43
    wmwmajie  
       2020-12-26 10:51:08 +08:00
    支持强制类型你可以不用,但是如果你要用的时候没有那就不行,所以必须支持强类型。
    也只有支持了才是出路,才能为后续的编译铺好路。
    darknoll
        44
    darknoll  
       2020-12-26 10:57:09 +08:00
    能活到今天,全是 wordpress 的功劳
    hantsy
        45
    hantsy  
       2020-12-26 10:59:42 +08:00
    @RickyC Hello World 的 Slim 项目从零开始安装环境,到新建一个项目,运行起来,几行命令搞定。

    ```
    choco install php comoser
    composer create-project slim/slim-skeleton:dev-master slim-sample --ignore-platform-reqs
    cd slim-sample
    php -S localhost:8080 -t public public/index.php
    ```
    Felldeadbird
        46
    Felldeadbird  
       2020-12-26 11:25:25 +08:00   ❤️ 1
    当初是你们说要向 JAVA,JS 等语言学习 。现在你告诉我 四不像?
    avenger
        47
    avenger  
       2020-12-26 11:28:39 +08:00 via iPhone
    Laravel 开发就是香啊
    cabing
        48
    cabing  
       2020-12-26 11:34:35 +08:00
    写 php 可以提早下班是真的。=。=
    charlie21
        49
    charlie21  
       2020-12-26 11:41:36 +08:00
    框架是否引入变量类型约束,取决于它是否放弃对 PHP 7.x 及之前版本的兼容

    app 开发者、framework 开发者和语言开发者所解决的问题不在一个层面,建议不要对话。不喜欢可以去用 JAVA
    hantsy
        50
    hantsy  
       2020-12-26 11:49:45 +08:00
    @Felldeadbird PHP 4 才是真正四不像,我个人印象 PHP5 以前的版本只能算是 Perl 写 CGI 的增强版本。
    cszchen
        51
    cszchen  
       2020-12-26 11:56:38 +08:00   ❤️ 3
    使用了 Go 之后,回头再用 PHP 真实爱死他了,生态很重要,我不想什么轮子都自己造
    hoyixi
        52
    hoyixi  
       2020-12-26 12:00:01 +08:00
    还早,个人目测以后编程语言慢慢演化,会变得语法都差不多
    hantsy
        53
    hantsy  
       2020-12-26 12:32:23 +08:00
    @hoyixi 语法上都是相互借鉴。

    语言或者框架关键看运行环境的差别。对于开发人员,选择成熟的生态更重要。
    hantsy
        54
    hantsy  
       2020-12-26 12:38:37 +08:00
    @avenger 不知道为什么,总感觉 Laravel,Codeigniter 的工具做得有点过头了。

    我一份工作用的 PHP 4 。之后几乎都是在用 Java 。 只是之前(大概 6,7 年前)有一客户临时有个 PHP 项目,丢给我写一下,让我自己选择框架。比较了 Codeigniter,Cake,Prado 等,最终我选择了 Cake 。
    ii55dd
        55
    ii55dd  
       2020-12-26 12:48:11 +08:00 via iPhone
    php 其它不说,就一点,windows server 安装 mysql,mssql 驱动,你试试,版本给你限定死,升级个鬼,php 就是 linux 玩的,windows 开发都是个事
    towser
        56
    towser  
       2020-12-26 12:56:12 +08:00
    类型约束不会提高心智负担,反而在项目规模膨胀时提高开发效率。主流动态类型语言都在引入类型约束,没什么四不像的。
    hantsy
        57
    hantsy  
       2020-12-26 13:36:20 +08:00   ❤️ 1
    @ii5 不知道你说的什么东西。

    20 年前我的第一份工作都是 Windows 下开发 PHP,编辑器直接连接公司的 Linux 服务器,使用 Apache 个人账号主页调试。

    再说了,在 Windows 上,驱动这些 PHP 默认安装文件都是内置的,选择性去掉注释就行了,而且 Windows 做开发环境,直接用 PHP 内置的 webserver 跑就行了,早不需要 Wamp 那一套了。安装驱动是什么操作???

    再者,Windows 下用 VsCode 在本地的 WSL,或者本地和远程的 Docker,K8S 环境直接开发也简单( PHP 代码在原生 Linux 环境上运行)。

    再者,这年头除了古董项目,有了容器了谁 SB 到新项目还在机器安装 mysql 这些玩意,我接触的 PHP 项目也没听说过在 Windows 下运行的,再说了全部容器化,什么环境一样了。
    hbolive
        58
    hbolive  
       2020-12-26 14:14:08 +08:00
    @cszchen 有同感啊,也试用了下 gin 框架,感觉就是回到了原始社会。。
    polarpy
        59
    polarpy  
       2020-12-26 15:30:49 +08:00
    @hantsy 赞同,什么语言适合就用什么语言,老的语言依然有很多项目在用,asp 还有一大把
    lovecy
        60
    lovecy  
       2020-12-26 15:33:08 +08:00
    @hantsy 他可能说的是 mysqlnd 吧,编译安装的时候可以自己选择一个库文件。没在 win 下编译安装过,不知道 win 下的版本问题,不过这种客户端库文件,升不升级好像意义不大。
    polarpy
        61
    polarpy  
       2020-12-26 15:34:19 +08:00
    @ii55dd 原生安装都是初期了吧,现在集成环境,docker 一大把,dnmp 可以试一下
    hantsy
        62
    hantsy  
       2020-12-26 15:40:33 +08:00
    @lovecy 第一次 PDO 出来就对什么 mysqli,oci 什么没兴趣了。20 年前我在大学,书上才用这些东西。
    zzerd
        63
    zzerd  
       2020-12-26 16:04:04 +08:00
    @coolesting js 的包管理真是火葬场,社区也就那样吧,不然就不会有 deno 了,我
    感觉和 php 半斤八两。
    back0893
        64
    back0893  
       2020-12-26 16:30:55 +08:00
    @hbolive 是的..
    如果写 web 业务 php 真是舒服
    zjttfs
        65
    zjttfs  
       2020-12-26 16:37:18 +08:00
    后台管理 /小项目 php 很爽啊. 写接口用 go 来写. 语言互相配合.
    php01
        66
    php01  
       2020-12-26 17:21:01 +08:00
    目前三种语言工作中都有接触用到过,java,go,php 。
    只有 php 让我有自由的感觉。我喜欢这种感觉。
    一个语言,可以同时做到宽松与严谨。和其他语言只能做到严谨。你说说看,哪个更自由,一个有得选,一个没得选。
    CodeCodeStudy
        67
    CodeCodeStudy  
       2020-12-26 17:24:24 +08:00
    静态语言越来越动态,动态语言越来越静态,这是个趋势。
    Rache1
        68
    Rache1  
       2020-12-26 17:30:11 +08:00   ❤️ 2
    跟一群没怎么用过 PHP,对 PHP 的认知还停留在十年前的一群人在一起讨论现代化的 PHP,简直滑天下之大稽。
    lovecy
        69
    lovecy  
       2020-12-26 20:03:58 +08:00
    @hantsy 额,PDO 连接 MySQL,用的也是 mysqlnd 客户端库。
    php.net/manual/en/mysqlinfo.library.choosing.php
    hantsy
        70
    hantsy  
       2020-12-26 20:10:40 +08:00
    @faqqcn 大部分一提到 PHP 就想到是 PHP 4 那样瞎 JB 写的嵌入到页面的代码。

    PHP 基础类库还是不足。https://github.com/hantsy/transaction-analyser/tree/master/php
    hantsy
        71
    hantsy  
       2020-12-26 20:13:22 +08:00
    @lovecy PDO 将 Db 操作统一起来。和最近的几的 PSR 一样,推动 PHP 组件之间的互操作。
    hantsy
        72
    hantsy  
       2020-12-26 20:24:10 +08:00
    @sagaxu https://github.com/hantsy/transaction-analyser 7 天写了 7 个版本,Go 太难了,全靠 IDE 和 Google 。
    hantsy
        73
    hantsy  
       2020-12-26 20:35:49 +08:00
    @lovecy

    https://www.php.net/manual/en/mysqlnd.install.php

    > In the official PHP Windows distributions from 5.3 onwards, MySQL Native Driver is enabled by default, so no additional configuration is required to use it. All MySQL database extensions will use MySQL Native Driver in this case.

    PHP 5.3 这都多少年前的事了。
    EminemW
        74
    EminemW  
       2020-12-26 21:59:25 +08:00
    动态语言 ide 代码提示不完善,很蛋疼
    laravel
        75
    laravel  
       2020-12-26 22:46:05 +08:00
    做 php 的也没必要把自己限定在 php 范围内吧,多学几门语言也不难
    sagaxu
        76
    sagaxu  
       2020-12-26 23:09:32 +08:00 via Android
    @hantsy 七个 Java 翻译过去的代码,还是 Java 那味儿
    mongodb
        77
    mongodb  
       2020-12-26 23:30:04 +08:00
    只说一句,这个开发速度快,也未必就有 Python 快。
    hantsy
        78
    hantsy  
       2020-12-27 11:06:39 +08:00
    @sagaxu 必须的。熟悉了 Java,遵循 OOP,换一种语言写出来的结果也是差不多的。
    weiqk
        79
    weiqk  
       2020-12-27 20:22:07 +08:00 via Android
    我一直不知道为什么 php 要用框架,尤其不懂为什么 php 要弄各种模板,它本身不就是个模板么
    aloyuu
        80
    aloyuu  
       2020-12-27 23:05:51 +08:00
    @weiqk 重复造轮子有成就感,类似于 红芯
    hbolive
        81
    hbolive  
       2020-12-28 09:53:07 +08:00
    @weiqk 你自己写个留言板博客啥的,当然可以不用框架,也不用模板。。
    但这世界不都是这种项目。。
    joesonw
        82
    joesonw  
       2020-12-28 10:12:26 +08:00
    还是 facebook 之前, 包括 HHVM 给 PHP 续了命.
    hantsy
        83
    hantsy  
       2020-12-28 11:50:28 +08:00
    @weiqk 20 年前的都是那样的,代码与模板一体,ASP,PHP,还有人写 JSP 也一样。

    任何技术都是跟着时代在不断进化的和完善的。当你拒绝不了时代前进,只有跟进。就这么简单。
    hantsy
        84
    hantsy  
       2020-12-28 11:56:32 +08:00
    @joesonw 我没有用过。HHVM 算是 PHP 的一点点创新,对 90%的人可有可无。

    以前真正想商业化的 PHP 项目,可能都会用 Zend Engine 优化。(现在 Zend 也不是以前的那个 Zend )( Zend 工具开发 PHP 很方便)
    avenger
        85
    avenger  
       2020-12-28 14:12:18 +08:00   ❤️ 2
    @hantsy

    Backend Frameworks with the most stars on GitHub:

    1. Laravel - 63.1K⭐️
    2. Django - 54.5K⭐️
    3. Flask - 53.3K⭐️
    4. Spring Boot - 52.5K⭐️
    5. Express - 51.3K⭐️
    6. Ruby on Rails - 47.3K⭐️
    7. Meteor - 42.2K⭐️
    8. Nest - 32.9K⭐️
    9. Koa - 30.5K⭐️

    仅供参考
    alinwu05
        86
    alinwu05  
       2020-12-28 14:56:57 +08:00
    后端用过 C++,C#,Python,PHP,虽然性能有些问题,但是 PHP 的开发效率让我无法割舍,特别是小项目,PHP 很快就搞定了。有人提驱动,扩展的问题,那应该是很多年前啦,我一直用的是 Windows 下开发,Linux 服务器部署,什么扩展都没有问题。
    hantsy
        87
    hantsy  
       2020-12-28 19:47:48 +08:00
    @avenger 嗯嗯,这个列表不错。

    但我要说的关注度与真正的流行趋势是两码事(不完全 100%吻合吧,但我不否认 Laravel 的确很流行 )。

    这个列表上的除了 2,3,9,其它都玩过。

    Meteor 的创意不错,关注度的确很高,但实际应用情况就不得而知了。1.0 开发了几年,从 0.x 版本就我开始关注,开始自己玩,到 1.0 正式放弃不再看了,还是回到 NodeJS 。

    Meteor 能够进这个列表,真是意外。据我的了解,即使是在国外,只有极少数人愿意迁移到 Meteor,国内可想而了 。
    lovecy
        88
    lovecy  
       2020-12-30 10:10:34 +08:00
    @hantsy “PHP 5.3 这都多少年前的事了”,我不知道你在说什么,英文原文是说从 5.3 开始就用了 mysqlnd 了,不管你是 PDO 还是 mysqli 还是 mysql,都是 mysqlnd 。
    hantsy
        89
    hantsy  
       2021-01-01 12:12:43 +08:00
    @lovecy

    PHP 5.3 这都多少年前的事了====》早过时了。

    帮你大概翻译一下。大概的意思是:

    从 5.3 起,Windows 官方版本内置了 mysqlnd, 《《《并且默认启用,你不需要额外配置》》》。并且所有 MySQL 驱动也会在 mysqlnd 加套。

    话说回来,不知道你要表达什么东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:49 · PVG 20:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.