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

php8.3 更新了

  •  
  •   mimiphp · 2023-11-24 18:53:03 +08:00 · 3857 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    节节高升 18:06:28 所以被更新了

    节节高升 18:06:35 也就是我上次说过的

    节节高升 18:06:48 php 核心团队现在产生分歧

    节节高升 18:07:04 核心团队成员里面有一个鸟叔是中国人

    节节高升 18:07:27 这个鸟叔和 php 创始人两个人更加趋向走 java 路线

    节节高升 18:07:48 但另外一批人更取消继续维持动态脚本语言的路线

    节节高升 18:08:12 因为鸟叔他们认为走强类型语言更加提高性能

    节节高升 18:08:45 但随着 jit 扩展的加入,也就是动态编译的引擎加入,动态脚本语言的开发方式得以保存

    节节高升 18:09:04 由于 php 是非盈利组织,基本大方向的决定都是投票决定

    节节高升 18:09:12 所以最终鸟叔和创始人退出

    节节高升 18:09:43 而现在成立了 php 基金会,保持非盈利,继续由其他核心团队成员开发维护

    节节高升 18:09:51 注意,开发 PHP 的都是 C 语言程序员

    节节高升 18:10:08 所以 php7 以后,其实鸟叔退出

    节节高升 18:10:27 因为 php6 就是鸟叔推出的。。。直接没有上架被否定了

    节节高升 18:10:45 php7.4 停滞了很多年,原因就是创始人也退出了

    节节高升 18:11:14 现在 php8 以后就其实是基金会提供资金,更多的其他核心成员在开发了

    节节高升 18:11:20 并且保持 1 年更新一次

    节节高升 18:11:23 这是好事

    节节高升 18:11:39 因为包括前端的 js 同样的问题

    节节高升 18:11:56 也就是本身你是脚本语言,就必须要解析环境

    节节高升 18:12:39 浏览器本来就是个最优秀的解析环境。但强类型语言的程序员,比如微软的,facebook 的等等,都喜欢工程化,打包编译生成二进制的方式

    节节高升 18:12:55 但不论 php 还是 js ,最终都要环境才能执行

    节节高升 18:13:20 所以微软的 TS 和鸟叔的 php 强类型 PHP ,可以理解都是走错了方向

    节节高升 18:13:44 因为他们拿一个动态脚本语言来改变开发方式,根本没有提高任何性能。

    节节高升 18:13:57 只是让强类型语言的程序员适应罢了

    节节高升 18:14:16 但 php 现在国外很火。 包括原生 javascript 很火

    节节高升 18:14:30 所以并不是只有强类型的程序员主导

    节节高升 18:14:50 而且幸好坚持脚本语言的都是官方团队

    节节高升 18:15:07 强类型语言的程序员不是总喜欢吐槽执行性能吗

    节节高升 18:15:24 比如 python 团队从来就没有考虑过执行性能,基本都是嗤之以鼻

    节节高升 18:15:34 为什么 python 会这么傲骨?

    节节高升 18:16:02 因为他的发展和社区火热程度,导致这些响吐槽的人会被 10 倍喷回去

    节节高升 18:16:16 你们也可以去 python 官方社区看一下互喷多好玩

    节节高升 18:16:46 python 也是脚本语言,但人家几行代码就能搞定爬虫,甚至高级人工智能算法

    节节高升 18:17:24 因为只要涉及到纯后台的算法程序,从来就不是一效率作为第一标准的

    节节高升 18:17:38 都是以结果的精准度作为结果的

    节节高升 18:18:02 所以强类型语言非常适合开发数据库,等等需要及时响应,高并发的程序员

    节节高升 18:18:12 注意,数据库也是个程序软件

    节节高升 18:18:27 这种软件就肯定需要强类型语言来开发

    节节高升 18:19:05 但更多的场景,比如算法领域,web 领域等等,都是脚本语言的天下

    节节高升 18:19:34 特别是 nginx 这个软件的加入,php 和 python ,甚至 nodejs 等等都根本不用关心高并发

    节节高升 18:19:44 因为 nginx 才是响应客户的高并发软件

    节节高升 18:19:56 数据库也是响应结果集的高并发软件

    节节高升 18:20:21 但中间的 php,python,nodejs 等等其实只是简单逻辑+查询数据库+返回信息给 nginx 而已

    节节高升 18:20:44 特别是 php 的 php-fpm 。。。动态扩充进程,消减进程

    节节高升 18:21:11 也就是强类型语言的人,一谈一个语言,第一步就是谈性能

    节节高升 18:21:59 比如 web 领域,我用 java 同样可以搞个监听端口的 web 服务器。。。 然后开始吐槽 php 你也可以监听端口,但你那点并发简直就是垃圾。。。

    节节高升 18:22:26 但最终真实情况是,包括 java 开发的 web ,也是用的 nginx 来当作前端响应用户的并发软件

    节节高升 18:22:42 所以强类型语言的人总是拿一个单一语言来谈性能。

    节节高升 18:22:54 但实际使用,一个系统,都是多种软件配合完成的

    节节高升 18:23:27 而 php 又是个异类,一直检查 html+php 可以混编,同时优化解析器性能,比如 jit

    节节高升 18:24:39 所以 php 纯后端算法程序,性能也不差了。而继续保持脚本语言开发方式,最大的优势就是任何变量,不需要关心类型。大量的 C 语言提供的内置函数。。这些都是强类型语言无法比拟的

    节节高升 18:25:45 特别是 golang 这个强类型语言提出协程后,php 的 swoole 以及官方 php8 都提供了协程开发方式。性能上高并发完全没有问题了

    节节高升 18:26:19 这些是其他强类型语言完全无法理解的,也坚持多线程才是天下的观点

    节节高升 18:26:52 但不好意思,golang 就是你们强类型语言的阵营,但它提出的多协程性能已经接近多线程了

    节节高升 18:27:18 所以实际上程序员开发行业一直都是这样,谁都不服谁。

    节节高升 18:27:41 我们公司我有段时间是很担忧的

    节节高升 18:28:00 因为老板被 java 团队,和伟达的洗脑。准备放弃 php 了

    节节高升 18:28:14 不过无所谓,只是一个打工工作罢了

    节节高升 18:30:12 @蕭道钦 所以也就是说,php8.0 这个版本还有创始人和鸟叔的影子

    节节高升 18:30:33 但后续的版本会逐步取代什么函数加变量类型的方式

    节节高升 18:30:45 完全就是多此一举的事情

    节节高升 18:31:48 比如

    你这个例子,如果不指定 return 必须是 bool 类型。。。程序也完全不会报错。只是某些编辑器会提示而已。也就是官方的底层都不会认为这是个错误,会自动帮你推到类型了

    蕭道钦 18:32:23 嗯

    节节高升 18:32:57 这里面微软,和 facebook 是最跳的两个公司

    蕭道钦 18:33:19 我觉得如果不是做研发的,我们更多是实现业务逻辑就够了,能快速实现需要的东西就够了

    节节高升 18:33:23 微软的 vscode ,facebook 的 react 还有更多的事情都是这两家公司搞出来的

    节节高升 18:33:27 一大批的粉丝

    节节高升 18:33:45 但离谱的是,这两家公司根本就没有原创过什么自己的语言

    节节高升 18:34:01 特别是微软,现在是印度人管理,不是比尔盖茨了

    节节高升 18:34:18 基本都是仿造苹果

    节节高升 18:34:56 微软自家的语言,都是早期比尔盖茨那批人搞的。比如 asp,vb,asp.net,还有手机版本的微软系统

    节节高升 18:34:59 还有 IE

    节节高升 18:35:07 但基本都不再更新了

    节节高升 18:35:27 facebook 就不谈了。完全就是二手贩子

    节节高升 18:35:41 跟国内的 360 公司非常像

    节节高升 18:36:27 但问题是中国主流高校,都是 java 课程,像 python,php 这种完全没有官方证书颁发权力的。高校不会开课,要不然你这个毕业证没有任何意义

    节节高升 18:36:39 所以才导致国内主流都是强类型语言的程序员

    节节高升 18:36:50 特别特别搞笑的就是 javascript

    节节高升 18:37:12 要不是浏览器内置这个语言,这些国内的强类型语言程序员肯定老早就想取代

    节节高升 18:37:20 但问题是取代不了,不是吗?

    节节高升 18:37:59 所以微软和 facebook 正好又出名,又喜欢跳。。。完全符合的国内程序员主流行业的价值观

    节节高升 18:38:19 但实际上国际上,就拿 js 来走,走原生的,走 jquery 的多得多

    节节高升 18:38:40 动态语言的后端程序,那真的是百花齐放了。我指国外

    节节高升 18:38:52 但国内,基本上随便谈,肯定 java 第一

    节节高升 18:38:58 第二就是 asp.net

    节节高升 18:39:56 蕭道钦
    我觉得如果不是做研发的,我们更多是实现业务逻辑就够了,能快速实现需要的东西就够了 @蕭道钦 对的。。上面思路你看明白就知道。大多数都是 C 语言基本的高级程序员在互喷。。。我们这种普通应用级别的程序员,基本上根本涉及不到底层原理

    节节高升 18:40:34 我只是特别反感微软和 facebook 而已。。。要么你们自己弄一个出来,不要在那里逼逼不好吗

    节节高升 18:41:01 你看看谷歌,那才是高手如云,什么 golang,android 各种原创语言

    节节高升 18:41:32 微软说实话比尔盖茨不管了以后,就是个印度人在管理而已,毫无核心竞争力

    节节高升 18:41:43 只是市场占有率摆在那里

    节节高升 18:41:53 特别是前期默认中国盗版

    节节高升 18:42:07 目前中国要改变不使用微软,基本不肯能了

    节节高升 18:42:15 但谁不在吐槽呢?

    节节高升 18:42:22 跟微信一个德行

    节节高升 18:42:27 这就是垄断的后果

    40 条回复    2024-03-05 15:56:29 +08:00
    dobelee
        1
    dobelee  
       2023-11-24 20:36:21 +08:00 via iPhone
    岁月不饶人,鸟哥变鸟叔了。
    jtsai
        2
    jtsai  
       2023-11-24 20:57:40 +08:00
    PHP 话题现在热度这么低了,帮忙支持一下
    NessajCN
        3
    NessajCN  
       2023-11-24 21:14:48 +08:00
    > 节节高升 18:21:11 也就是强类型语言的人,一谈一个语言,第一步就是谈性能

    当然不是了.....ts 提高了个毛毛的性能,很多情况完全就是方便调接口和 debug 而已
    Python 还有 type hint 呢
    kenvix
        4
    kenvix  
       2023-11-24 21:29:03 +08:00
    所以你转发这个人的一大堆暴论是要说啥
    BBCCBB
        5
    BBCCBB  
       2023-11-24 21:38:43 +08:00
    https://www.laruence.com/2022/04/12/6089.html


    你发的这些很多都是错的. 比如 php7 后面就不关鸟叔什么事了.. 我一个不写 php 的我都看到过新闻,
    neoblackcap
        6
    neoblackcap  
       2023-11-24 21:47:54 +08:00
    Python 什么时候不注重性能了? Python 是因为注重 C 扩展兼容性以及单线程效率所以很多改动没法做。但是随着这些年大厂的不断投入,Python 也开始动了,新版本已经加入颗粒度更小的子解析器。有利于日后解决 GIL 问题。
    至于 Javascript 还不够激进么? V8 早年都是直接生成机器码执行的。V8 在我看来,都属于 VM 的第一梯队了
    pubby
        7
    pubby  
       2023-11-24 22:07:06 +08:00
    从 php4 开始的我。。。。。

    现在除了历史遗留项目的维护,已经没有理由选择 php 了
    Features
        8
    Features  
       2023-11-24 22:39:38 +08:00
    PHP 太好用了,一直用 PHP7.4 ,美滋滋
    dongisking
        9
    dongisking  
       2023-11-24 22:47:07 +08:00   ❤️ 1
    php 写到后面特别难维护,尤其是被魔术方法__call 以后,没有人知道中间发生了什么,只能自己看源码,打印数据、除非你在注释里声明了 @method 。另外 ide 对 php 的支持不够,导致后期 debug 尤其痛苦
    Enzoliu
        10
    Enzoliu  
       2023-11-24 22:59:48 +08:00
    @dongisking #9 太真实了!
    mimiphp
        11
    mimiphp  
    OP
       2023-11-25 02:15:30 +08:00
    @kenvix 我是基于 php8.3 更新了,跟同事有感而发,而且我也是发在 php 讨论组,怎么就变成暴论了呢?
    mimiphp
        12
    mimiphp  
    OP
       2023-11-25 02:17:36 +08:00
    @BBCCBB 我不是 php 核心团队的人,很多信息也是看资料了解的,时间隔太久记不太准确,抱歉。但大体就是这么个情况,php 核心成员确实产生分歧,鸟叔确实不管 php 了。但其实还有其他中国人在核心团队,只不过投票确认的方向是大多数人的选择
    mimiphp
        13
    mimiphp  
    OP
       2023-11-25 02:33:57 +08:00
    @neoblackcap 主要谈的是 php ,但由于 python 和 javascript 都是脚本语言,附带提到。至于你说的 V8 ,VM 。本质上还是脚本运行环境,但我主要想表达,把 javascript 工程化,本地打包编译,是一个错误的发展方向。更夸张的是微软提出的 typescript 了。也就是不论基于浏览器引擎的浏览器 js 还是基于 v8 的 nodejs ,本质都是脚本语言,脚本语言最大的特性就是不是二进制,是字符串。我们开发的代码不是编译执行的字节码,而是解析引擎需要读取的 API 而已。你可以理解为跟 sql 字符串一样。。但数据库或者 php 解析引擎或者 python 解析引擎,或者浏览器的 js 解析引擎等等,都是得到我们的脚本代码,去激活内置的 C 语言逻辑,与 cpu 内存交互的底层还是 C 语言。
    如果理解上面的说法,则任何基于脚本语言开发的所谓打包过程,工程化过程最终都会还原为脚本代码而已,没有提高任何性能。至于其他回复说到的可以规范 debug 可以规范开发等等。。这都是强类型语言编译打开的思想。

    脚本语言最大的特性就是简化了开发,随时修改随时迭代。并且 php-fpm 还是个异类,可以说 nginx 与之交互的 php-fpm 多个线程之间毫无关系。这种特性可以保证你修改代码前一秒其他线程都能能完成用户响应,后续新的请求响应的就是你修改后的代码。

    但强类型语言做不到。甚至 php+html 坚持的混编也是 20 年前 asp,cgi 等脚本语言发明的。

    前端 vue ,react 等等框架提出的虚拟 dom ,diff 算法,最终到了今年 2023 年了。作者 vue 作者都在思考虚拟 dom 到底有没有必要存在。也就是以虚拟 dom 建立,却最终发现真实的 dom 才是根本。因为不管第三方折腾多少年。js 官方团队一直有自己的更新节奏。juqery 也一直在更新。。如果 vue 自己推到虚拟 dom ,最终不就跟后端 php 或者 asp 把 html 理解为普通字符串,然后混编 php 代码替换修改节点内容了吗?兜兜转转不就又回去了吗?
    javascript 官方团队本身就在以浏览器解析基准的情况下提出模块组件式开发。一直在更新。
    那微软的 typescript 到底在做什么?不就是让强类型语言的 java 程序员等等适应开发前端代码吗?不论解释如何优化,工程化,避免错误,debug ,最终还是编译成原生 javascript 不是吗?
    那没有 typescript 之前,或者说 javascript 官方团队的开发方式就是垃圾?
    明显就是弱类型语言的脚本语言开发方式不符合强类型语言的开发方式才搞出来的 ts 嘛。。。。所以我上面聊天时就说了态度,微软你这么出名,没必要改变 js 的编程习惯,你可以自己弄一个出来专门针对强类型语言的程序员的前端开发方式啊。并且打包编译二进制效率更高。要求每个用户安装一下就好了嘛。。。

    但普通用户都是浏览器呀,javascript 就内置在浏览器内的呀。。。你搞这么多还不是要还原 javascript 嘛。。。你改不了啊。微软你自己不是有 IE 吗?现在没市场了,就来破坏前端开发流程参一脚了么?
    mimiphp
        14
    mimiphp  
    OP
       2023-11-25 02:43:41 +08:00
    @dongisking 我不知道你对 php 的理解程度是到了什么级别。但是你提到的__call,包括__set,包括__get 。不是写得很清楚了吗?
    调用不存在的方法,设置不存在的属性,和调用不存在的属性。。

    这种魔术方法,魔术常量 php 非常多。你是在质疑 php 提供的这些方法和常量不可靠还是质疑看不懂?

    你比如__DIR__ 就是获取当前脚本所在的系统绝对路径。。。你是想分析他的 C 语言代码的执行逻辑吗?对于应用级别开发的程序员,你只需要知道__DIR__就能拿到绝对路径,为什么能拿到你去关心什么呢?

    同样的道理,当你实例化一个对象,然后调用了一个不存在的方法,你可以借用__call 来统一封装提示信息,或者跟踪日志等等。。

    如果你开发过自己的框架

    __set 方法和__get 方法是非常强大的两个魔术方法。

    当控制器中直接
    $this->aaa='你好';

    由于当前控制器就没有这个这个成员属性。。所以__set 方法会被激活。你可以正好利用这个机制把调用的属性名称和值记录下来,然后做模板方法 display 的参数注入。。。这样在模板文件中就可以直接得到控制器对应的变量名和值了。

    这些魔术方法已经说明了使用场景,为什么你要去知道执行过程呢?就是因为不清楚原理,所以叫才叫魔术啊。。。。
    icy37785
        15
    icy37785  
       2023-11-25 02:45:27 +08:00 via iPhone   ❤️ 4
    @mimiphp #10 还以为你是转发了别人的暴论,原来是你自己说的话啊。
    怎么说呢,感觉有点儿没常识了。
    但是我怕你拉着我辩论,所以我先把你 block 了。
    mimiphp
        16
    mimiphp  
    OP
       2023-11-25 02:53:41 +08:00
    @pubby 你现在就是在一个 php 开发的社区讨论没有理由选择 php 。。。你可以自己用 java 或者 nodejs 去开发相同的社区,然后在那边各种挖苦讽刺都无所谓。但最离谱的是,在一个 php 程序开发的社区来讽刺 php 有多么不堪。。岂不是自相矛盾?
    而且我发布的聊天记录已经说清楚了,国内环境是由于高校主流只有 java 课程,证书认证。php 这种纯非营利性组织本来就没有官方认证证书。

    你让这么多计算机毕业的程序员如何标榜自己是高人一等呢?

    但就连淘宝,百度,小米,虎牙都在用的 php ,这么多小虾米却看不上,并且国外反过来却这么火,不应该自己反思一下吗?
    mimiphp
        17
    mimiphp  
    OP
       2023-11-25 02:55:00 +08:00
    @icy37785 多谢拉黑,因为沟通的过程其实很无聊,还要保持风度。既然互相看不上,没必要讨论是最好的结果
    nicoljiang
        18
    nicoljiang  
       2023-11-25 04:24:52 +08:00
    PHP 这几年真是肉眼可见地飞速进步啊。
    以前主要就靠 WordPress 赏饭吃,然后现个 Laravel 赏饭吃,很好奇未来会再出个什么。
    前景真是无限好。
    zzzkkk
        19
    zzzkkk  
       2023-11-25 06:49:12 +08:00 via Android
    @pubby
    现在用什么
    superares
        20
    superares  
       2023-11-25 09:18:11 +08:00 via iPhone
    PHP8.3 可以给类常量指定类型了,没看出来他们想弱化强类型啊
    buxudashi
        21
    buxudashi  
       2023-11-25 09:25:05 +08:00   ❤️ 1
    laravel 也是过度设计了。

    本来 php 就是简单易用。偏偏很多人拿来跟强类型对比。并且故意仿强类型。很好奇既然这样,干什么不直接换语言呢?
    happy32199
        22
    happy32199  
       2023-11-25 10:47:25 +08:00 via iPhone
    PHP6 是 10 年前的事情了吧? 可到现在 PHP 官方协程还没完善…… 都是拖字诀…
    在上海,前同事公司是 PHP 转的.net ,被裁员后找 PHP 工作,只愿意给 8 9k 了
    因为.net 刚转 2 年 也不会客户端 而且平时也是当 PHP 来写的 就是多个 convert jarray 只能找 PHP 了
    binbin0915jjpp
        23
    binbin0915jjpp  
       2023-11-25 15:18:25 +08:00
    强类型旧项目的天坑....一律 error
    a632079
        24
    a632079  
       2023-11-25 16:02:56 +08:00
    所以你这标题党有点过分了吧……尤其是引入这堆暴论。


    "强类型语言的人,一谈一个语言,第一步就是谈性能" —— 你确定?强类型带来的是维护上的好处,而且 TypeScript 的编译是抹除泛型,还原成 JavaScript ,真要分裂社区,那为啥微软不移植到 .net runtime ,然后编译成 wasm 跑浏览器上呢?—— 也就是现在 blazor 走的路子。


    “因为只要涉及到纯后台的算法程序,从来就不是一效率作为第一标准的
    节节高升 18:17:38 都是以结果的精准度作为结果的”

    说的好像 PHP 能跑的很精准一样,Python 确实精准,内置的整数类型就是 Decimal ,PHP 是?而且开发效率,真的放眼看一下世界好嘛。Spring Boot 、Asp.net Core 这种注解向的开发体验,以及开发便捷度,算是 Web 体系里面开发效率最高的那一批了…… PHP 单文件就是路由确实爽,但是系统复杂度上来后,开发以及维护体验明显是呈
    现下降趋势的。


    “php-fpm……但最终真实情况是,包括 java 开发的 web ,也是用的 nginx 来当作前端响应用户的并发软件”

    他真的连 Proxy 是干嘛都不知道嘛…… 服务架构是真的没接触过还是咋的,Nginx+fpm 就等于一个应用,fpm 本质就是一个解释器,nginx 碰到了 .php 文件,就把文件发给 fpm ,fpm 解释完后把结果给你( fpm 、nginx 可以不同服务器),这里的 nginx 完全充当的不同层级啊……


    “这些是其他强类型语言完全无法理解的,也坚持多线程才是天下的观点” 这个就更离谱了,Java 的 Netty ,虚拟线程、Kotlin 的协程,C#/Rust 的 Async/Await 不都是你说的“协程”。多动动脑子,Go 协程本质上就是绿色线程,底层是 GMP 模型,本质上就是线程池+调度器,协程本来就是运行时基于线程模型上的进一步抽象罢了。操作系统上根本没有协程的哦。


    “但离谱的是,这两家公司根本就没有原创过什么自己的语言”
    微软基于 .net 平台的 C#,F#,VB 不是?而且你想发明个语言又没啥难的,难的是编译器以及运行时的实现,以及持久稳定的改善,维持语言特性;而且语言本身不能太糟糕; Go 本身语法上就是开倒车,除了 AOT 、绿色线程外,其他语法都是槽点好吧……以及,你用的 Windows 上最好用,以及支持最新标准的 MSVC 不是?.net runtime 不是?你玩的游戏,只要是基于 Unity 的,用的不是 C#,甚至可能直接上了 .net mono runtime?

    其他小槽点都懒得吐槽了……睁眼看看世界,别要自己觉得,世界就像你认知的那样了。
    mimiphp
        25
    mimiphp  
    OP
       2023-11-26 09:19:54 +08:00
    @a632079
    你回答得蛮好的,也肯定是持反对态度的。但希望你回答时,不要人身攻击,满篇带着不屑的态度。每个人的认知本来是有限的,并且任何语言只是工具。我整篇内容发表的是我个人观点,其中心思想就是 javascript,php,python 都是脚本语言,脚本语言的特性就是不要去让开发方式走强类型的伪编译,打包工程化。而微软和 facebook 却带着全世界的脚本程序员一直走工程化的方式,这是一种改变,但我认为没有任何性能提升。

    至于你回复的一直说我认知问题,其实你自己也有很多认知错误。php-fpm 不是解释器,是进程管理器.

    我拿 java 的 web 部署举例,是指:一个 web 服务器,任何一个动态语言都能监听端口,如果要谈单一语言的性能,强类型语言来做 web 服务器肯定比脚本语言要高效。但实际部署时为什么用 nginx ,原因就是 nginx 是直接面对用户请求的并发。nginx 的目的并不在 Proxy ,Proxy 只是它必须把逻辑部分转发给其他语言,但 nginx 强大之处在于静态文件的处理,比如图片,视频,html 等等。我回答你就不会去讽刺你的认知,我只是纠正一下。希望你也能做到这样的沟通。

    至于后面你还在说协程本身协程本来就是运行时基于线程模型上的进一步抽象罢了。这个‘罢了’用得不够好。多线程一直是物理支持的 CPU 通道调度,程序要求 CPU 调度就会存在性能损耗。协程就如你说的各个语言逐步支持,但协程就是发展方向。脚本语言都在支持协程的路上,也就是中心思想就是协程是抽象化的线程完全正确,但脚本语言在性能上利用协程包括你说的强类型也在利用协程,这才是一个正确的性能优化方向。

    也就是强类型和弱类型语言请不要再拿性能来说话,因为协程的出现,本身就已经在提高性能的路上了。
    mimiphp
        26
    mimiphp  
    OP
       2023-11-26 09:42:08 +08:00
    @happy32199
    因为协程开发本身就需要更高深一些的技术把控,虽然协程是虚拟化的调度,但同样需要去了解 CPU 工作原理。所以官方一直没有做具体的例子,其实提供了 Fiber 你只要理解原理是完全可以操作的了。但如果你不是为了拿 php 做 cli 命令行模式去做纯后端,php 还是更适合走 php-fpm 的 cgi 网页模式。因为在 web 领域,php 的部署方式实在是太方便了。热更新这一点就非常符合 http 的短连接方式。

    我上面已经举例,百度,淘宝等等大型互联网公司也会拿 php 来做 web 服务器的后端语言的。

    如果你是中小型网站比如我的 https://ffsou.com 同样是非常顺手的。

    至于你说的在上海 php 只能拿 8 9k..这完全就是每个公司的技术主管的问题。我们客观一点,你随便去任何一个在线求职网站看看。如果你进入一家以 php 为主体的开发公司,薪资肯定不会这么低的。你非要去一个.net 主体的公司,去问 php 岗位薪资,那当然就低人一等了嘛。。

    就类似你去一个 vue 前端的公司,非要谈 react 或者 angular 多优秀。同样会被嗤之以鼻嘛。。。

    比如我现在发布 php8.3 更新了,就放在 php 讨论组。。。却还是跑来一些强类型语言的人来找存在感一样的道理。道不同不相为谋而已
    mimiphp
        27
    mimiphp  
    OP
       2023-11-26 09:56:54 +08:00
    @buxudashi
    laravel 也是过度设计了
    你这句话我非常认同,包括 wordpress 一样。其实严格来说一个语言是否好用,其实就是提现在 laravel 这样的开发框架,和 wordpress 这样的终端开源产品的使用火热程度。
    在 web 开发领域,laravel 确实让很多中小型公司能快速开发属于自己的产品,这已经很优秀了。但。。。恰恰问题也出在 laravel 。由于现在程序开发实际就是很多很多不了解原理的伪程序员加入,laravel 架构如何设计,那大多数使用的程序员就认为 php 就是这样的设计了。

    比如国内 php 程序员,其实都应该算 thinkphp 程序员,国外 laravel 程序员就算是 laravel 程序员。。
    也可以说就是框架使用者。
    但你不得不承认这些开源框架的出现才会让 php 这个语言火得起来。
    但一个客观事实就是这些基于框架的程序员还不能理解 php 更新的兴奋点,因为他们接触不到。
    甚至很多原生 sql 语句都不会写,但他们也一样开发出程序了,不是吗?

    java 也同样一大批 springboot 的框架使用者。

    前端也一样很多离开 vue ,根本不会写原生 js 。甚至原生 css 都不会了。

    至于终端产品的 wordpress 市场占有率也摆在那里。
    所以我们可能是更接触深入一些的 php 程序员,我也有自己的开发框架。
    但任何语言不就是工具对吗?能用上快速完成任务,就是很好的。

    至于 laravel 为什么这么难用,为什么 wordpress 性能这么低。那如果出现了性能瓶颈,你才会愿意去分析和研究原因。
    当然这时就已经出现质疑 php 不行的情况出现了。但你稍微深入了解一下,可能自己开发个框架,或者原生写一下代码,其实 php 或者几个原生 sql 就解决了你的性能问题了。
    程序员也是在逐步学习进步中的。

    只是真实情况就是 laravel 或者 wordpress 就已经让很多人质疑 php 性能低了。
    但另一面来说又让很多人不得不承认 php 实在太方便了,不是吗
    mimiphp
        28
    mimiphp  
    OP
       2023-11-26 10:10:11 +08:00
    @superares
    常量指定类型,这个是 class 封装后的一个性能优化,只能算特例。。

    因为常量一旦定义,本身就无法修改。
    但其实同样也是一个可选项,也就是自动推导依然存在。
    但以前的版本是定义函数时都要求返回值配置类型。。这就太强类型化了。
    目前更新来看都是漏洞修复,和扩充内置函数。
    至于弱化强类型,需要大版本更新才知道,上面说到的只是我个人判断。
    superares
        29
    superares  
       2023-11-26 10:26:05 +08:00 via iPhone
    @mimiphp 强类型不是为了性能,你指不指定类型,ast 阶段都会处理。
    在我看来,公司要求 PHP 强类型是为了工程化。同时如果你用过 PHPstan 这种静态分析工具就知道,指定类型可以方便分析工具分析代码问题,减少程序问题。 既然控制不了人员的水平,就让程序来控制质量
    mimiphp
        30
    mimiphp  
    OP
       2023-11-26 10:30:56 +08:00
    @superares
    大哥,我整篇内容报考回答你都可以看一下先。。我就是在反对工程化。当然你非要工程化来控制质量,那当然就是希望强类型开发编译方式了。就如某个回答一样,你为什么不换语言呢?
    强类型编译检查都通过不了岂不是一目了然了?
    happy32199
        31
    happy32199  
       364 天前 via iPhone
    很多人都需要 PHP 的高性能的,至少被贬低的时候 不会总是提方便快捷 有新项目的时候,敢大胆采用…
    有情怀的 webman amphp 可以试试 矮子里面的高个
    mimiphp
        32
    mimiphp  
    OP
       364 天前
    @happy32199 webman 是基于 wokerman 的开发框架。wokerman 是纯 php 写的网络框架.你可以理解为
    wokerman 是 Composer 第三方类库的扩展代码包。类似的第三方类库太多了。但都是 php 脚本代码的。
    而 swoole 是 C 语言开发的,我们在谈 php 的性能,那肯定就是指 C 语言开发的 php 底层和扩展。
    这一点来说,swoole 已经算是扩充了 PHP 的性能。但 wokerman 是调度了 PHP 内核自带的 pcntl_fork 子进程。
    当然性能上来说区别不大,但思路上完全不一样。wokerman 走的多子进程。
    swoole 是 C 语言独立支持的协程。

    amphp 就是基于 php8.1 官方 Fiber 协程扩展封装的开发框架。

    所以我们在讨论一个语言的问题,不是讨论一个框架的问题。

    你可以说 swoole,Fiber,workerman ,但不能说 webman 和 amphp ,他们只是基于前面 3 个之一的开发框架而已
    lyxxxh2
        33
    lyxxxh2  
       364 天前
    之前写 app 和 docker 的时候

    app:
    我想用 ip+端口。
    因为 fpm 和 nginx 的强制绑定, 让我觉得浪费。
    就像买东西,买个没用的附加品,也会觉得浪费吧。

    docker:
    我查了下: laravel docker nginx 多域名绑定
    3 个域名,也需要 4 个 nginx 。

    不是有 swoole workman 之类吗?
    php 生态都是以 fpm 为开发的,不一定都兼容生态。
    例如: https://github.com/jqhph/dcat-admin/issues?q=Octane
    mimiphp
        34
    mimiphp  
    OP
       364 天前
    @lyxxxh2
    fpm 不是一定跟 nginx 才能绑定,其实跟一切能代理的软件都能绑定。。甚至 apache 改一下配置也是可以支持 php-fpm 的。
    但为什么要用 nginx ,是因为 nginx 强大的并发性能和静态文件的处理能力。。这一点总是有人去忽略,而去谈代理。。。

    还有你说的 nginx 绑定 3 个域名需要 3 个或者 4 个 nginx ,这就是你对 nginx 的工作原理不了解导致的了。

    不论是不是 docker 安装的 nginx ,其实都只会映射消耗一个或者两个端口。
    比如 80:80,443:443 。
    docker 映射出来端口后,后面的域名访问就不会消耗端口了。。。。

    因为 nginx 或根据访问的域名自动与 conf 配置文件匹配。。。也就是 server_name 这个参数就是来配置域名的。

    你不同的域名,就是走不同的 server 配置,每个不同的 server 配置里面的 server_name 就是$host 这个 nginx 变量记录的
    也就是说,访问不同的域名,其实都是走的 80 端口或 443 端口,但进入 nginx 的执行逻辑,就是根据不同的配置文件来读取不同的站点目录的事情了。。。。。


    至于你说的 ip+端口,当然每个软件监听同一个端口肯定就会冲突,所以一个 ip 下要多个 web 服务,肯定就要消耗不同的端口了。

    但 nginx 却是一个 ip 下消耗一个 80 端口就支持无限个域名绑定了。。。。
    lyxxxh2
        35
    lyxxxh2  
       363 天前
    @mimiphp


    1.
    fpm 并非跟 nginx, 我之前就想写服务器软件, 怕别人不懂,我的锅。

    我的问题是: 必须要绑定服务器软件 这是无用的附加品

    2. 你所说的 nginx 多域名... 跟我所提出的问题 不太沾边 我所说的是 docker 。

    比如 3 个项目。
    a.com b.com c.om

    常见方式是:
    a.com 监听 8081 b.com 监听 8082 c.com 监听 8083
    安装一个 nginx 监听 80,这个 nginx 根据域名来转发给 8081/8082/8083 。
    这 4 个 nginx 了。

    这是 fpm 和服务器软件绑定的原因,造成的 `附加品` 更多。

    ***
    至于一个 nginx 是否可行,也是可行的。
    nginx 根据域名来 fastcgi_pass 不同的 fpm


    说这么多 我的问题就是一个:
    fpm 必须要绑定服务器软件。 在某些时候,这是无用的附加品。
    mimiphp
        36
    mimiphp  
    OP
       363 天前
    @lyxxxh2
    我不知道具体你 docker 里面到底要运行什么软件。
    但如果有任何动态语言存在实际上都可以监听端口的啊。

    然后 nginx 任何一个 docker 里面都不要部署进去,直接部署在系统外层。。然后根据不同域名配置不同的 server ,porxy_pass 指定 127.0.0.1:8081
    porxy_pass 指定 127.0.0.1:8082
    porxy_pass 指定 127.0.0.1:8083
    不就好了么?
    lyxxxh2
        37
    lyxxxh2  
       363 天前
    @mimiphp
    我问题: ** fpm 必须要绑定服务器软件。 在某些时候,这是无用的附加品。**
    难道 cgi 监听的端口 可以作为 http 服务器?

    php -s 只能开发用
    swoole 之类的 我之前也说了 生态问题
    mimiphp
        38
    mimiphp  
    OP
       362 天前
    @lyxxxh2
    我明白了。因为如果是我自己部署,肯定 nginx 是放在服务器,而不是容器。
    但大多数提供的 docker 镜像都是打包好了包括 nginx ,语言,数据库全部软件包的镜像。
    那当然容器对于服务器来说就需要映射端口。
    服务器只有一个 80 端口,当然就需要在服务器再安装一个 nginx 来转发不同端口到不同容器了。

    但如果是自己部署,我当然是一个 nginx 直接转发到 php-fpm ,即使存在 3 个不同容器的 php-fpm

    需要注意的是 php-fpm 是 php-cgi 的进程管理器,php-cgi 只负责处理.php 文件。
    所以静态文件还是需要 nginx 来处理,虽然 swoole 可以独立当作 http 服务器,但还是比 nginx 差远了。

    我明白你纠结的问题所在。但第三方提供的镜像就是把 nginx 部署进去的,你也只能这样去用。
    ben1024
        39
    ben1024  
       361 天前
    php 不一定要向 java 靠近,但要向工程化企业化靠近;需要更多中间件和 laravel ,workman 类的项目
    gloeaerris
        40
    gloeaerris  
       264 天前
    这人一大堆菜鸡暴论也是挺无聊的,大概也就是个 CURD BOY 级别的小白
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5646 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:48 · PVG 14:48 · LAX 22:48 · JFK 01:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.