写在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开发人员都比较讨厌这个说法,诸如此类的还有
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凉了吗?