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

php · 浏览次数 : 177

小编点评

大家好,我是码农先森。今天我们来聊聊 PHP 这门语言的发展历程和一些有趣的事实。 PHP 是一种在互联网历史上具有重要地位的开源编程语言,它最初是为了统计网站访问者而诞生的。PHP 的发展可以分为几个阶段,从最初的 Perl 脚本到现在的 PHP7,每一次迭代都带来了重要的改进和功能增强。 在 PHP1.0 的时候,它是作为 Perl 脚本的扩展而诞生的。随后,PHP2.0 发布,它不仅能够访问数据库,还能嵌入 HTML 中进行动态数据处理。PHP3.0 发布时,引入了可扩展模块,这为 PHP 生态的发展奠定了基础。到了 PHP4.0,首次推出了 Zend VM 虚拟机引擎,大大提高了 PHP 的运行性能。PHP5.0 发布时,引入了面向对象特性,语法上也支持类和对象的创建。2003年,WordPress 的发布进一步降低了网站搭建的门槛,推动了 PHP 的普及。PHP7 的发布更是带来了质的飞跃,性能大幅提升,引入了 JIT 编译技术。 在 PHP 的发展过程中,它的影响力不仅仅局限于互联网行业,还渗透到了各行各业。许多知名的互联网公司,如 Facebook、阿里巴巴、百度和腾讯等,都是基于 PHP 技术构建的。PHP 的易用性和灵活性使其成为许多初学者的首选编程语言。 然而,PHP 也面临着一些挑战。近年来,由于 Go 语言等新兴技术的出现,PHP 开发者的技术水平出现了分层。尽管如此,PHP 社区仍然保持着活跃,许多开发者都在为 PHP 的发展和生态建设做出贡献。 展望未来,随着疫情的逐渐消退和互联网行业的不断迭代创新,PHP 有望在高性能方面取得更多突破。如果 PHP 能够继续保持其易用性和灵活性,并在高性能方面取得建树,那么它将在 Web 开发领域继续占据重要地位。 最后,希望 PHP 程序员能够抱团取暖,共同应对行业的挑战,推动 PHP 生态的建设,让 PHP 重新回到巅峰时刻。

正文

大家好,我是码农先森。

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 的前世今生看真相相似的内容:

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

大家好,我是码农先森。 1994年我出生在湖南的农村,就在同年加拿大的拉斯姆斯·勒多夫创造了 PHP,这时的 PHP 还只是用 Perl 编写的 CGI 脚本。或许是时间的巧合 PHP 变成了我后半生谋生的手段,当时拉斯姆斯·勒多夫写这些脚本的目的,只是为了统计自己网站的访问者。就是这样一个简单的目

go高并发之路——go语言如何解决并发问题

一、选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比GO快很多。现在工作中也还是有一些老项目在使用PHP,但21年之后的新项目基本上就都

[转帖]40年前电脑、芯片、光刻机,美国第一,中国第二

https://www.mzfxw.com/e/action/ShowInfo.php?classid=12&id=111592 如果讲毛主席时代中国在电脑、芯片等技术产品很厉害,年轻人绝不会相信,说这不可能。 可这是事实,老徐(微信公众号:手抄报)就找到这些资料,有图有真相。 两个年轻人不记得的人

__wakeup()魔术方法绕过(CVE-2016-7124)

# __wakeup()魔术方法绕过(CVE-2016-7124) ## 漏洞简介 在php反序列化数据过程中,如果类中存在__wakeup方法,调用 unserilize() 方法前则先调用__wakeup方法,当序列化字符串中表示对象属性个数的值大于 真实的属性个数时会跳过__wakeup的执行

php反序列化个人笔记

反序列化 什么是反序列化? 格式转换 序列化:对象转换为字符串或者数组等格式 反序列化:将数组或字符串转换成对象 为什么会出现安全漏洞? 魔术方法 如何利用漏洞? 通过构造pop链,找到代码的逻辑漏洞,进行getshell,rce等操作 反序列化利用分为三类 魔术方法的调用逻辑 语言原生类的调用逻辑

七年之痒!一个 PHP 程序员职业生涯的自述

作为一名程序员常常都是与代码为伴,平常写个技术文档或PPT都费劲的人,竟然不知不觉地写了这么多文字,我也是感到十分的惊讶。17年毕业到今年刚好七年了,俗话说七年之痒,这一次的自述也算是对自己一个职业生涯的复盘了。

PHP转Go系列 | GET 和 POST 请求的使用姿势

大家好,我是码农先森。 说到 HTTP 请求工具想必对我们做 Web 开发的程序员都不陌生,只要涉及到网络请求都必须使用。对于我们 PHP 程序员来说,最熟悉不过的就是 CURL 扩展,只要安装的这个扩展便可随意发起 HTTP 请求。 但在 PHP 语言中还有一个很好用的 Composer 包「gu

php不使用Office包实现上万条数据导出表格

经过上传客户要求主副表迁出,又提出可以将某张表的数据导出excel,听着很简单,实际看数据表发现上万条数据,并且需要关联表查询相关字段,导出的表格才可以被客户看明白。 要是使用office包目前后台内存耗尽,被迫停止运行,所以想要突破百万条数据导出需要另辟它路。所以就是使用了导出CSV并非excel

php+sql后台实现从主表迁出至副表(数据超万条)

上万条甚至上百万数据进行迁出做备份或者进行不妨碍原系统数据的操作,现在很多企业都会用到,目前就需要将上百万条数据进行迁出到副表保存并操作,直接再后台写一个按钮进行操作,既方便操作也不会很慢。毕竟是客户需要,不能每次迁出都要客户去数据库操作,操作的不好那数据危险度挺高的。 1、分页查询数据库主表数据

PHP 程序员转 Go 语言的经历分享

大家好,我是码农先森。 之前有朋友让我分享从 PHP 转 Go 的经历,这次它来了。我主要从模仿、进阶、应用这三个方面来描述转 Go 的经历及心得。模仿是良好的开端,进阶是艰难的成长,应用是认知的提升。希望我的经历对大家能有所启发。 模仿 著名艺术家毕加索说过「模仿是人类一切学习的开端,然后才是创新