大家好,我是码农先森。

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不行了」的声音消失殆尽,并重回巅峰时刻。

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


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

PHP 真的不行了?透过 PHP 的前世今生看真相的更多相关文章

  1. 如果Android真的收费了,你怎么看?

    前言 今天突然看到一群里有人发了下面这样一张图片,然后群里又炸了!   于是又和同事讨论了android收费的问题,然后隔壁正在玩农药的UI妹子就笑了... 没错! 安卓可能要收费了!安卓可能要收费了 ...

  2. 透过WinDBG的视角看String

    摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...

  3. javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景

    在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new D ...

  4. 你真的了解CSS继承吗?看完必跪

    也许你瞧不起以前的 css ,但是你不该再轻视眼下的 css .近年来 css 的变量系统已逐步得到各大浏览器厂商支持,自定义选择器等强势袭来,嵌套系统/模块系统也在路上…为了更好的掌握 css 这门 ...

  5. Scrum已经俘获中国开发者的心? ——从《2017年开发者调查报告》看真相!

    云栖社区通过为期两个月,对7032份有效调查问卷分析统计,2017年12月发布了首份<2017中国开发者调查报告>.报告显示,37.3%的开发者表示,协作工具主要来自企业内部自研的协作工具 ...

  6. 【Bug】看不见的分隔符: Zero-width space

    今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...

  7. [BUG随想录] 看不见的分隔符: Zero-width space

    今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...

  8. THUPC2018看题总结

    THUPC2018看题总结 #6387. 「THUPC2018」绿绿与串串 / String 据说是签到题啊. 首先根据题目的意思,我们发现如果能找到那个最后一次选择的对称轴岂不是美滋滋. 自然地,我 ...

  9. 是的 你没看错!!!用JAVA为MCU开发物联网程序?

      是的 你没看错!!!用JAVA为MCU开发物联网程序?          一直以来,物联网设备这种嵌入式硬件,对于Java软件开发者来说,就是Black Magic Box,什么中断.寄存器,什么 ...

  10. 看完了进程同步与互斥机制,我终于彻底理解了 PV 操作

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

随机推荐

  1. 深入学习和理解Django视图层:处理请求与响应

    title: 深入学习和理解Django视图层:处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 ...

  2. CMake快速入门教程

    前言 Make工具因遵循不同的规范和标准,执行的Makefile的格式也是不同.主流的Make工具包括: GNU Make QT的qmake 微软的 MS nmake BSD的 pmake 每个平台都 ...

  3. leaflet常用插件汇总介绍

    1.Leaflet Ant Path(线条流动效果) 在交通项目.管网应用的项目中,常常需要标注出道路的走向.河流的流向或者管线的流向等等,Leaflet Ant Path能够很好的解决这类问题: g ...

  4. blocks (单调栈)

    题目描述 解析 对于这道题,他要求大于k的数进行操作,所以直接让每个数减k,然后用前缀和维护一下与0比较就可以了,因为一段区间和的平 均值大于k的话,那么这就是一个合法区间,即为操作后的这个区间和大于 ...

  5. Windows有自带的远程桌面 为啥还要商业远程桌面

    网上有一类观点:最好的远程桌面就是windows自带的远程桌面. 那我们打破砂锅问到底,亲手实践下看看. 首先,我们来到了windows官网-远程桌面介绍页面. 如何使用远程桌面 设置你想要连接以使其 ...

  6. 微信小程序 canvas 手写签名(2d)

    canvas 2d 目前支持预览,不支持真机调试 index.wxml <canvas type="2d" id="canvas" bindtouchmo ...

  7. Machine Learning - 梯度下降

    一.梯度下降:目的是为了寻找到最合适的 $w$ 和 $b$ ,让成本函数的值最小 \[w = w - α\frac{\partial J(w,b)}{\partial w} \] \[b = b - ...

  8. mysql 命令行安装方式

    一:下载 先到 mysql 官方网站下载:https://dev.mysql.com/downloads/mysql/ 点击直接下载: 解压到目录:D:\mysql-8.0.19-winx64  如图 ...

  9. C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品

    笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了.于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate ...

  10. golang开发 gorilla websocket的使用

    很多APP都需要主动向用户推送消息,这就需要用到长连接的服务,即我们通常提到的websocket,同样也是使用socket服务,通信协议是基本类似的,在go中用的最多的.也是最简单的socket服务就 ...