最新消息:

PHP的困境-马上就2023年了PHP凉了吗?-16270

php koic_zhzz 419浏览 0评论

写在PHP8.2发布之后的今天

12 月 9 日消息,PHP 8.2 版本近日正式发布。对于不少程序员朋友来说,PHP 是“最好的语言”,而近日发布的 8.2 版本可谓是 2022 年的年度主要版本更新了。

PHP 8.2 新增支持在 traits 中定义常量、引入了“Random”扩展和“read-only”类、Disjunctive Normal Form (DNF) 类型,更新了内置 web 服务器的 MIME 类型表,减少了各种函数返回的字符串的内存占用,初步支持 macOS Instrument 的 JIT 性能分析生成,为 Linux 启用 arc4random_buf,为随机字节引入 Glibc 2.36 以上版本。

PHP 8.2 初步支持 Windows for ARM64 平台上的跨平台创建,分配 JIT 缓冲区 Opcache 靠近 PHP .text 字段,以允许使用直接的 IP 相关调用和跳转。新版本还为 PHP Sockets 引入新选项,支持新的 Curl 选项,新的 ZipArchive 方法,废弃动态属性,并优化了一些性能。

PHP的困境-马上就2023年了PHP凉了吗?-1

大概PHP开发人员都比较讨厌这个说法,诸如此类的还有

PHP凉了吗?
PHP穷途末路了?
Is PHP Dead?
学PHP不如学nodejs、go …..

知乎和很多技术社区都充斥这种话题,PHP的维护者大概会说

PHP没问题,是phper的问题
你凉了,PHP也不会凉
世界上大多数网站都是PHP开发的
PHP入门快,开发快,中小型网站首选
性能不足?你大概没听过swoole吧

除了恶意抹黑的,恶意夸赞的,带有利益关联的,还有更多的是其他的语言社区的调侃:

PHP是世界上最好的语言

任何编程语言都有多面性,都有自己的独特优势,就像PHP二十多年,即便和现代语言相比有许多不足,但依然能诞生了许多优秀的软件,情人眼里出西施,许多phper珍惜她陪伴的日日夜夜,依旧深爱着这个“最好的语言”。

只是像上面一样,针对PHP的弊端和未来持怀疑和悲观看法的人愈来愈多,社区内人心思变亦愈发明显,PHP现在无疑处在一个关键节点上,即便现在PHP的存量项目十分庞大,但趋势一旦形成,如果没有强有力的扭转力量,到某个时间点就会一泻千里,急速消亡,就像当初的Flash/ActionScript一样,曾经多风光,现今谁记得!

好了,不做更多的情绪化吐槽,以下仅从我个人的经历,分析归纳PHP困境的表现和产生的原因。

一、对PHP的认识

作为一门脚本语言,PHP首要的是写得快,写的爽,不要有过多的心智负担,如果需要性能或者特殊功能无法实现,就用它的底层语言(C语言)实现,多数脚本都是这样做的,像 C+Python、nodejs C/CPP+JavaScript、Nginx+Lua等等,熟悉游戏开发的开发者应该很熟悉这个套路,不管是客户端还是服务端,通常底层搞个C/C++,常规业务配个Lua,兼顾性能和开发效率。PHP的很多函数效率极高,其实只是包装的C函数而已。

上述模式在大多数场景效果很好,有性能、有效率,只要底层服务足够多,即便不会使用底层语言C/C++,只用脚本本身也能满足大多数项目需求。

​二、PHP差了什么

PHP在标准库和扩展规范上一直没有做到标准化、规范化,分散的函数库和类库,早起面向过程和后期面向对象的混杂,当然这有很多的历史遗留问题,亦或者是保持兼容性,这方面不是我要表达的重点。重点是PHP在底层服务方面有致命的缺陷,尤其随着近年来开发模式的不断发展,互联网用户规模的扩大,node/go等方案的强势崛起,这种缺陷愈发致命。

​PHP官方不提供基础服务的实现

这里说的网络服务不是socket/stream的系统函数包装,而是基础的server,就像你用nodejs不用自己去实现个http服务器,go就更不用说了,多年来,PHP官方方案依旧是依赖于Apache/Nginx/PHP-FPM,PHP自己根本没有独立性,几乎将PHP限制死在了简单的web应用上。

其实也不用追求什么异步、协程,像Java大多数应用的还是跑在阻塞的api上,那又如何?不是照样风生水起。PHP虽然没有多线程,可linux多进程也没差到哪儿去,再加上常驻内存,其实可以有极大的性能提升和更广阔的应用场景。

一直以来我都很难理解PHP官方为什么不做基础server,尤其是现在node/go/dart等,新生代的解决方案都会自带一个标准实现,直到最近才稍有感悟:

​PHP官方对PHP的定位是什么?

PHP is a popular general-purpose scripting language that is especially suited to web development.

​似乎一直是这样,从没改变过,只不过十年前的web开发和现在的web开发早已天差地别,但是官方好像不是这样想的,近年来,除了PHP5.4和PHP7有两次大的内部性能的提升外,并没有什么有效的变革,我不能说这些没什么用,我只想说这个世界竞争激烈,开发者和语言没有领结婚证,外面的小贱人多得是。

顺便引申一下PHP扩展开发,PHP官方好像没有优化扩展开发体验的计划,那个Zend Api真是一言难尽,数次想用扩展开发的功能最后用了RPC

PHP对一些基础功能极度依赖C语言的实现,如果底层没有实现,几乎是必须要引入第三个编程语言解决。

社区对PHP的期待是什么?

从简单的博客站点到如今的分布式应用、微服务,社区对PHP在标准化、规范化、性能、适用场景一直有更高的期待,期望她能在原来的web上更进一步。为此通过扩展、开发模式等各方面尝试新的模式,reactphp/amp/php-pm/swoole/roadrunner/workerman等方案提供了基础的网络服务,pthreads/parallel/pth 提供了多线程的方案,swoole提供了协程的方案,PSR社区标准和Composer包管理器为现代规范打下基础,更有 jphp/peachpie/polarphp 等新的解释器的尝试,可以说phper一直在努力让PHP更现代,走向更广阔的空间,可惜的是多数方案的质量根本难以和node/go等语言内置的方案竞争,由于不是官方支持,或者支持平台有限,测试不足,API不友好等原因,在PHP社区内部也难以普遍接受。

看了PHP的rfc,还是在集中于语法、jit,官方似乎从来都不关注一些常用基础设施。或许zend公司不求上进,php开发团队定死了php的运行模式,亦或是我要求太多了吧。是啊,你对php做过什么贡献,你凭什么要这要那~~

三、简单说下swoole

最初使用swoole还在1.x,还没有websocket实现,还是多进程/异步的模式,做过好多个项目,游戏、IM、网关等等,有一些坑,还好要么简单调整下源码或者规避掉也没什么大问题,也买过swoole的加密软件,swoole前期一直在尝试各种模式,后来固定到协程,也算是稳定了方向,整体还是很赞赏swoole团队的。只不过我们后来逐步过渡了其他模式,引入了其他语言,就用的少了。

商业化也无可厚非,谁都不是喝西北风的。不过我建议swoole做一次大的减法,固定一种开发模式,只做核心的功能,可以减轻开发压力,提高软件稳定性,也可以适当减轻商业化的压力。有时候这样也行,那样也行,还不如专注一样。

还有即便商业化,也及不赞成swoole去扶植任何一个框架,那是社区的事情,官方应该去做一些商业配套软件,php和swoole已经十分上层了,稍有技术积累的团队不会轻易采用那些框架。也建议社区不要做过多的框架,社区缺的是高质量的组件,例如搞一个完整的、独立的、无依赖的、适合协程环境的数据库组件,比那些有价值的多

我更建议开发者关注roadrunner这样的的方案,尤其有go经验的开发者,这种方案可能更合适,过渡更平滑,兼容性、扩展性更好。如果你接受两种语言的交互方式,也可以用Rust、C++。

四、吐槽一下技术舆论环境

唯大公司马首是瞻,所有的技术都向bat看齐,大公司的技术没什么神秘的,而且很多大公司的技术方案跟业内所认为的相差甚远。越是我们认为人家会用的,其实根本没有,或用的很少,java体系最为突出

从BAT“出来”的同学,不要胡乱传播技术方案,人家100个项目,有3个用到了框架A,还是魔改的,你就胡扯这个公司大面积使用框架A,赶紧上车吧,然后你有又搞不定~~

培训企业,卖视频、卖课程的经常编造一些技术方案、面试场景,而且还恶意攻击相似技术,太没底线

培训的质量是一年不如一年了

五、结语

当前的技术方案百花齐放,竞争非常激烈,如果PHP不能提出有竞争力的方案,那它的历史使命就快结束了,开发者都是喜新厌旧的,相爱的时候你侬我侬、缠绵悱恻,离开的时候头也不回,始乱终弃。

祝 PHPer 2020年好运

转载自:https://zhuanlan.zhihu.com/p/103369238

以下是该文章下面的评论

换个角度说一下php, 很多说php好的人,经常举例一些php的独特的特性来说明php的好,例如:

热重启,替换个文件立马生效.list map 等数据结构都用arrary大量的内置函数无需Import,直接使用-> 和 .import其他模块用反斜杠 …其他很多php特性然而,这么多年过去了,这些php独有的特性,仍然是php”独有”,新出的流行的编程语言dartlang, golang, swift, kotlin, 哪一个借鉴/抄袭了这些特性?反倒是从java, python, ruby中借鉴了很多。

如果php真的像某些人说的那么好,为什么其他编程语言不抄过去?

再说php好的时候,先反问一下自己,真的好吗?其他编程语言抄袭/借鉴了吗?

我举例说明几个编程语言的好的特性, dartlang, golang, swift, kotlin几乎都有抄袭/借鉴的:

python的多行字符串(很多编程语言都有,python的最简洁优雅), groovy抄去了python的raw string, 写正则的神器,再也不用了, dartlang抄去了 golang的coroutine(非golang首创,但是golang用的最好,最流行),java新版正在开发中C#的linq, stream, java8抄去了,其他编程语言也都抄去了C#的async/await, js, python, dartlang 都抄去了C#的扩展方法,dartlang, kotlin都抄去了coffescript/flow/typescript等,给js加类型注解,编译成js, python和php抄去了,直接内置到语法里,不需要编译一次等等。。。。其他很多请问哪些php独有的语法是大家都在抄的???2020-02-06


不是php不行,是程序员不行,php只是入门容易,80%的php也就是入门了而已.php各种比较底层的功能的东西很少有人会研究去用,小白多,小白跑了,不等于php凉了

小城市,领导扔个需求来,马上就要;接个活儿,不够买包烟,行情如此,还得php。


大厂都转go了,外包php还是霸主,高手很少会选择php作为主力语言导致php人才稀缺,导致公司找不到好的开发,导致转换技术栈,恶性循环,现在哪还有只靠一门语言吃饭的,学就是了


就自学PHP而言,通过Java入门oop思想,转入PHP框架的学习,搭建网站PHP最快,然后我更倾向前端学习,毕竟现在的潮流思想是全栈开发我相信以后也是,不要学一个两个语言就停下来,一般现在是前后端分离的趋势,所以建议多学几种语言,培训班说实话是被动的给你灌输,自学是主动的获取有目标的学,能自学不要去培训班,自学两年多,现在还没毕业,不要为了打代码而打代码,是因为喜欢


我觉得不是PHP的困境,是业余开发者的困境,过去市场需要大量业余开发者,而PHP由于简单,是最适合这些人的语言。现在市场已经容纳不下多少业余人士了,甚至入门级的专业开发也面临就业困难。Swoole算是给PHP强行续命,有没有效就难说了,很多人的逻辑是,都用上Swoole了,直接转Go更简单也更保险。

2020年没人会问哪些大公司大规模用Java,也没人会问哪些大厂用Go,但是还是会问哪些公司在用Swoole。

PHP8.2文章下面大佬们的评论

哪个语言像PHP一样天天改语法的,真是越改越废,改得PHP程序员都不认识了。

走入歧途
关心的东西是一点都没改……
高性能用户不是php的目标用户……

PHP 一直钻强类型的牛角尖。。但却永远无法成为真正的强类型。。。。强类型的真正意义是变量类型的内存长度固定,你可以 (A&B)|C 这都什么假强类型?难道你做到了 Rust 的 Box<dyn Type> ?另外 PHP 只要有强大无比的 Array 就永远没有真正意义上的强类型。NodeJS 类型也那么弱也没有阻止它占领一切,PHP 不如学习一下在上层实现一个类似 TypeScript 的超集来提升编程时的强类型体验。建议悬崖勒马,及时收手,在异步编程上多动动脑筋吧。现在已经支持了 Fiber,建议多考虑下原生支持文件异步 IO、 EventLoop 支持。

转载请注明:落伍老站长 » PHP的困境-马上就2023年了PHP凉了吗?-16270

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址