PHP 真的不行了?透过 PHP 的前世今生看真相

news/2024/10/6 1:30:20/文章来源:https://www.cnblogs.com/yxhblogs/p/18277495

大家好,我是码农先森。

1994年我出生在湖南的农村,就在同年加拿大的拉斯姆斯·勒多夫创造了 PHP,这时的 PHP 还只是用 Perl 编写的 CGI 脚本。或许是时间的巧合 PHP 变成了我后半生谋生的手段,当时拉斯姆斯·勒多夫写这些脚本的目的,只是为了统计自己网站的访问者。就是这样一个简单的目的就诞生了「世界上最好的语言 PHP」,伟大的事业往往是最简单的开始。这些用 Perl 编写的 CGI 脚本,可以认为是 PHP 的雏形,亦或是称为 PHP 的第一个版本「PHP1.0」也不为过。

据说下面这段代码是 PHP 第一个版本,不知大家有没有似曾相似的感觉。

<!--include /text/header.html--><!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->Hey, you are using Netscape!<p>
<!--endif--><!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->Sorry, that record does not exist<p>
<!--endif exit-->Welcome <!--$user-->!<p>You have <!--$index:0--> credits left in your account.<p><!--include /text/footer.html-->

也就在这一年,网景公司(Netscape)发布了 Navigator 浏览器0.9版,这是历史上第一个比较成熟的网络浏览器,一经发布则轰动业界,成熟的网络浏览器为 PHP 的快速发展提供了天然的优质土壤。

次年,拉斯姆斯·勒多夫发布了 PHP2.0 这个版本它不仅可以访问数据库,还能嵌入 HTML 中动态处理数据。新的特性吸引了一批 PHP 的爱好者,其中也包括了后来加入到了 PHP 核心开发组的 Zeev Suraski(泽埃夫·苏拉斯基)和 Andi Gutmans(安迪·古曼兹),著名的「Zend VM 引擎」便是由这两名开发者所主导开发的。

时间来到了1998年底,中国的即时通讯也在这时开始崛起,最典型的就是 OICQ 也就是 QQ 的前身。这时的 PHP3.0 官方版本也正式发布,这个版本最强的特性是它的可扩展模块,这点吸引了大量的业余开发者提交了新的扩展,这同时为 PHP 生态的发展埋下了深深的根基,以至于后续出现的 Swoole 异步通信扩展也是得福于此。

两年之后,在千禧之年「2000年」这也是互联网泡沫刚刚破灭的第一年。PHP4.0 发布了,这个版本首次推出了由 C 语言编写的 Zend VM 虚拟机引擎,新程序的运行性能相较于之前提升了近十倍。此外,语法上还引入了类和对象的支持,这便是面向对象特性的最初模样。

在国内非典还盛行的时期「2003年」,一个基于 PHP 开发的开源内容管理系统 WordPress v1.0 正式发布,一经发布就得到广大开发者的喜爱,让搭建网站博客的门槛极大的减低。根据目前最新统计,WordPress 的市场份额持续增长,已达到惊人的 46%,成为全球最流行的 CMS。这意味着在互联网上,大约有一半的网站都是使用 WordPress 创建的。可想而知看现有的数据就可以推测出当时的 WordPress 热度高涨,这也同时推动了 PHP 的广泛传播。还记得有次改写 WordPress 的源代码,习惯了面向对象编程的我,在面向过程的源代码面前仿佛被乌云笼罩,久久无法下手,不知 PHPer 有没有同感?

非典刚刚结束的次年「2004年」,新时代的 PHP5.0 正式发布,这是一个 PHP 跨时代的到来。并且之后多年里 PHP 一直在 v5 的版本上迭代,是 PHP 发展史上历时最长的一个大版本,这个版本里全面引入了面向对象特性,并且将 Zend VM 虚拟引擎升级到了第二代,使其性能得到显著的提升。

在 PHP5 发布的第三年「2006年」,国产 PHP 开发框架 ThinkPHP 诞生「当时的框架原名还是 FCS」,ThinkPHP 的发布惠及了国内大量的 PHP 开发者。其中我的处女项目就是用的 ThinkPHP3.2 开发的,相信有很多的 PHPer 也和我一样,吃到了这个国产框架的红利。但也是由于国产框架的推出,让 PHP 开发项目的门槛进一步的减低,吸引了大量非科班专业的人转行从事 PHP 开发,从而也造成了如今 PHP 开发者的技术水平层次不齐的局面。

PHP 长期以来的应用场景都是聚焦于 CMS 内容网站的建设,以至于在异步通信领域无所建树。直到 2012 年 Swoole 开始发布第一个版本,虽说刚开始的 Swoole 并不完美,但也填补了 PHP 在异步网络通信领域的空白。同时让 PHP 也能在实时通信、物联网通信、游戏开发等领域大展拳脚,在 PHP 的发展上做到了锦上添花。就在同年 Go 语言正式的第一个版本 v1.0 横空出世,标志着 Go 语言正式走向成熟,在往后的多年里一直备受编程界的强烈关注。Go 语言以高性能而闻名于世,而 PHP 在高性能方面存在着明显的短板,这也为多年以后 PHPer 转型 Go 语言而埋下了伏笔。

PHP 经过在 v5 版本上长达十多年的迭代,终于在2015年底正式发布了 PHP7,这是 PHP 一次质的飞跃。大家都知道改革开放对中国的经济产生了重大的影响,同样 PHP7 在 PHP 的发展史上也是产生了同等级别影响。同时让我们值得骄傲的是中国新浪微博工程师惠新辰「俗称鸟哥」,也是唯一的一名中国人成为了 PHP7 的核心发起人之一。PHP7 的问世让新浪微博系统的性能也得到了大幅度的提升,其实新浪微博平台第一代架构采用的是 LAMP 架构,后台系统的开发语言使用的是 PHP,此外还有很多平台最开始使用的也是 PHP 进行开发的,比如脸书FaceBook、阿里巴巴的淘宝、百度、腾讯等,这一点也足以证明 PHP 当时的火爆程度。

当我们还在受新冠疫情的困扰,每天核酸不断。而 PHP8 已在2020年底悄然发布,作为一个大版本的更新。其最大的亮点是引入了 JIT 编译技术,该技术能够在 PHP 代码执行时编译成机器码,而不是每次运行时都需要解释执行。JIT 编译技术提高了代码的执行效率,使得 PHP 运行更快,性能提升尤其显著,大幅度改善了 PHP 的执行性能。简而言之,PHP8 为 PHP 生态系统注入了强劲的动力。

现如今虽说疫情已经离我们远去,但疫情对全球经济影响仍在持续,加上某些国家的局部动荡,导致了全球经济的连续下滑。在这样的大背景下,我们所处的互联网行业也不容乐观,国内互联网公司裁员风波肆起,这也间接导致了程序员之间的内卷加剧。经济好比是一块蛋糕,经济萎靡不振蛋糕则会越来越小。程序员无法外展,那么只能内卷,更何况 PHP 一直处于被鄙视链的边缘,很多做 Java、C/C++、Go 等语言的就自认为更高级技术更牛,随着被其他语言的挤兑歧视,这也让长期只从事 PHP 开发的程序员被迫淘汰出局。我想这便是,如今被人认为 PHP 没落的真实原因吧?

幻想一下,如果回到疫情之前,世界经济持续高涨。国内的互联网行业也还是如火如荼,中小企业也蓬勃发展、生机盎然,呈现着一片繁荣的景象。那我想必 PHP 还是会在编程语言排行榜上持续霸榜,不至于跌落到前十开外吧。从所周知很多国内外的知名大公司也是缘于 PHP 起步的,同时也让 PHP 相关的从业者受益匪浅。从过往来看 PHP 对互联网行业所带来贡献,也足以对得起网络上一直流行的称号「PHP是世界上最好的语言」。

有次在 v2ex 社区上看到有位网友发布了一个帖子,其主要内容是感谢 PHP 给他带来的收益,让他一个前端的切图仔,也能上手使用 PHP 做后端开发,促使他接了很多的外包项目获得了可观的回报。但有人反驳说了,一个拧螺丝的打工仔,还感谢起扳手来了?但我想说的是如果连扳手都没有,那你可能连拧螺丝的机会都没有。纵观 PHP 这些年的发展也是在逐渐的迎合开发者,有些语言出身就在罗马「Go 语言出自谷歌的 C 语言之父」,而有些语言则在出身普通,势必会带来不一样的成长路径和结果。

时代造就了马云,同样也成就了 PHP。PHP9 还在紧锣密鼓的开发中,据说为了更好的性能,会引入类似 async/await 原生异步编程的方式,这对于 PHP 来说将是一种前沿且高效的编程模式。最后,随着世界经济的逐步恢复,互联网行业的不断迭代创新。PHP 也会焕发新生若在其坚守易用性、灵活性之外,再加强在高性能方面的建树,势必会稳稳地屹立在 Web 开发之巅不可动摇。

众人拾柴火焰高,PHP 程序员应该要抱团取暖勇度寒冬,努力推动 PHP 生态的建设。早日让众多唱衰「PHP不行了」的声音消失殆尽,并重回巅峰时刻。

感谢大家阅读,与君共勉。


欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/737931.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧校园视频监控系统

智慧校园视频监控系统助力学校传统安防监控智能升级,借助智慧校园视频监控系统可以避免传统视频监控“被动”监控,有效监控价值低,不能及时预警预防的能力。智慧校园视频监控具备大规模智能检测、多场景智能分析、机器自主学习、实时告警、实时分析、全天运行,实现校园管理…

施工现场视频监控系统

施工现场视频监控系统可以从作业人员进入施工现场的入口处就开始对进入人员进行现场视频监控系统的检测识别,如果系统侦查到进入的人员着装穿戴不符合工地企业的进入要求就会立即预警提醒进入人员按照要求整改后再进入施工现场,保证进入施工现场作业人员的着装合规符合要求,…

智慧工地视频监控系统解决方案

智慧工地视频监控系统解决方案赋能传统监控“大脑”思考能力,工地现有视频监控借助智慧工地视频监控系统可以实现对工地现场施工作业的及时识别预警,保障现场作业人员的人身安全及施工企业的现场财产安全,提升施工单位的工地智能化管理水平及安全施工效率。随着科技的发展,…

软件工具推荐-2-ssh终端工具-mobaxterm

官网 https://mobaxterm.mobatek.net/ 功能 社区免费版本,几乎没啥限制 文件上传 可视化操作

Vue引入vxe-table(一个功能非常强大的表格组件)

github介绍:https://github.com/x-extends/vxe-table Vue2版本对应vxe3版本,Vue3版本对应vxe4版本 vxe3版本的官网地址:https://vxetable.cn/v3/#/table/start/install终端下载:npm install vxe-table@v3在main.js文件中引入 3.引入一个内部图标测试一下,<vxe-icon na…

Linux下编译Azerothcore源码

前言 终于开始介绍Linux下如何编译AzerothCore源码了,本文编译和架设方法较为繁琐和细致,含Ubuntu、Debian和Docker(相较之前的Docker教程来说本文是手动版),且涉及到搭建注册网站和对外开放服务部分,故再次声明:本网站均为技术研究,若参考本网站教程搭建对外服务,我均…

Docker编译Azerothcore源码

维基百科 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同…

读人工智能全传02图灵测试

读人工智能全传02图灵测试1. 图灵测试 1.1. 模仿游戏 1.2. 20世纪40年代末至50年代初,第一台计算机的出现引发了一场公开辩论,辩论主题就是这一现代科学奇迹的潜力如何 1.2.1. 这场辩论中最瞩目的贡献当归属于一本名叫《控制论》的书,由麻省理工学院数学教授诺伯特维纳(Norb…

ubuntu apt update 提示 The repository ‘http://xxx Release‘ does not have a Release file

sudo apt update && sudo apt upgrade -y提示 报错 E: The repository ‘http://xxx Release‘ does not have a Release file.编辑文件 /etc/apt/sources.list, 添加下面代码保存 deb http://nl3.archive.ubuntu.com/ubuntu jammy main restricted universe multivers…

处理器SDK Linux软件开发

处理器SDK Linux软件开发 https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-edgeai/TDA4VM/08_06_01/exports/docs/devices/TDA4VM/linux/index.html 1.概述 欢迎使用处理器SDK Linux版TDA4VM! SDK提供软件和工具,让用户在德州仪器的边缘人工智能应用处理器上有…

jira修改RoadMap里的时间格式,硬核日期格式化

jira修改roadMap里的时间格式 在插件目录找到portfolio-plugin-9.16.1.jar将他下载到本地 使用zip解压软件解压jar包 全局搜索 DD/MM/YY 将其替换YYYY/MM/DD修改后效果图全局搜索 return${l()(o.getUTCDate().toString(),2,"0")}/${t} 替换 return ${o.getUTCMonth()…