如果PHP4时代的工程师来到了PHP8时代

首先 .

我是平田,负责PHP圣诞日历2020年的第17天。请多多关照。

从我认真地写 Qiita 的文章之后,我竟然发现已经过去了3年半。光阴似箭,正是指的这个情况。然而,更令我惊讶的是,PHP4发布已经过去了20年之久。

推动 Perl 成为主流,朝着后端开发语言的巅峰迈进的 PHP4。
通过 ZendEngine 的集成,开启了 PHP4 改善性能的新篇章。
PHP4 带领我走上了 Web 工程师的道路。

如果那个传说中的PHP4时代的工程师来到PHP8发布的现代,会发生什么呢?

突然出现在我非常期待着 PHP8 发布的时刻,A 先生,曾经非常期待着 PHP4.0 的发布。

时代的不同

Aさん: “嗯?这是哪里…?”

我:「现在是2020年12月。」

A说道:”啊,20年后?为什么!?”

我不知道原因,但我有一个好消息要告诉你。上个星期,PHP 8.0发布了。

A: “8.0?! It was just 4.0 not long ago!”

Aさん:「8.0的分數嗎?就在不久前還是4.0!」

※ PHP4.0发布于2000年5月22日。

我是这么认为的。而且已经过去了20年,主要版本已经升级了4个。

Aさん说:“真是太不可思议了……离这么久还能持续20年,PHP真不容小觑。”

大约在2000年左右,PHP还是一个新兴的编程语言,老一辈的程序员们曾经对它有一种被看不起的感觉,说它是Perl的糟糕版本。

我现在是Web开发语言中无法忽视的存在。

A: “That’s amazing. I’d love to hear how much it has changed.”
Aさん:「真是厉害。我很想知道它已经变化了多少。」

我「一定要。」

面向对象编程的进化

A先生:“PHP的面向对象编程,还远远不能发挥其作用呢……”

我认为是的。因为PHP4没有命名空间和类内常量。

※ 类(Class)和命名空间(Namespace)的内部常量(使用const指定)、统一构造函数(__construct())、以及访问器(Accessor)在PHP5中进行了实现。

我说:”现在对于课程的抽象化已经成为常态,但是要到PHP5以后才真正实现了。”

A:难道你学会使用Abstract了吗?

(Note: The sentence provided is originally in Japanese, so the Chinese version is a translation of the meaning.)

我可以让私自己(实现implement)在接口中。

A先生:“界面”

※ abstract和interface都在PHP5中被实现。

我觉得现在编写类的方式几乎与Java相同,功能也几乎一样。正因为如此,现在很多人在PHP中也用领域驱动设计(Domain Driven Design)写应用程序。

A “DDD” 的人:

※ PHP7以降,类的抽象化和类型提示变得更加方便,使得高级类设计成为可能。
※ 在Laravel和CakePHP3中使用DDD现在已经成为常态了,但事实上,埃里克·埃文斯的《领域驱动设计》早在2003年就问世了。

Zend引擎

A:顺便问一下,Zend Engine还在使用吗?

我「是的。PHP8中搭载了ZendEngine4。」

A先生:“尽管已经有这么多进展,ZendEngine还是ZendEngine呢…”

※ 尽管 PHP8 还搭载了第四代的 ZendEngine4,但其是从 PHP4 开始引入的 ZendEngine。
※ 老实说,ZendEngine 只是在减轻负担的同时增加了功能,核心部分并没有多大改进。

我最近喜欢使用缓存来加速,而无需对ZendEngine进行不必要的修改。

Aさん:“In-memory缓存?那个垃圾的APC?”

尽管APC自PHP4时代就存在,但在性能方面却十分脆弱,一直到PHP5.2版本才变得相对稳定,因此在此之前被视为麻烦的存在。

从PHP5.5开始,能够使用Zend开发的OPCache来进行高性能的代码缓存。

※ 从PHP5.5开始,Zend OPCache已经成为标准功能,而且后来通过Zend OPCache Plus扩展功能,也可以在PHP5.3/5.4中使用。

在PHP7.0及更高版本中,由于ZendEngine的轻量化,即使没有使用OPCache,也明显提高了速度。

A先生:“这么快就完成了吗?”

我最近做了一个实验,将使用PHP7.0+OPCache和PHP5.3+APC对一个只执行MySQL的SELECT语句的页面的中间件进行了更换,并使用ApacheBench进行了测试。结果是每秒处理的请求数量提高了大约三倍。

A 女士:「三倍」

顺便提一下,与未安装APC的PHP5.3相比较,差距已经扩大了十倍。

我还没有亲自尝试过,但据说从 PHP8 开始使用了 JIT 执行方式,进一步提升了速度。

A: “JIT?Java?”
Aさん「即时编译器?Java?」

曾经类似Java专有专利的JIT在PHP8中被采用,通过将优化代码(OPCode)转换为JIT编译来实现执行速度的提升。

HHVM / Hack是Facebook开发的一种开源软件。

如果要谈到即时编译,我认为是指的HHVM。

A:那是什么东西?

据说,2014年左右,Facebook开发了HHVM / Hack,这是一种源自PHP的开发语言和编译器,随后Facebook用Hack替代了PHP。

我是说“Facebook开发了一款基于PHP的VM格式的PHP JIT编译器。PHP8的JIT是在此之后大约六年才发布的。”

A:「Facebook?书店?」

我:“是SNS哦。”

A先生:“社交媒体?”

※ Facebook于2004年开始提供服务。日本的SNS热潮也始于2004年左右,Gree和mixi也都是在2004年开始提供服务。
※ 顺便说一下,SNS这个词在日本变得普遍的时间似乎是在mixi和Facebook在2004年左右发布之后。至少在2000年左右,我还没有听说过SNS这个词。

我觉得像PHP和Hack这样被分支出来的语言独立发展真是挺令人感动的呢。感觉PHP也变得很成熟了呢。

“A: 这和C和C++类似吗?”

我「老旧」

※ Hack的信息开始出现是在2014年左右,C++的初始发布是在1983年。

框架

我觉得在 PHP5 之前,PHP 的开源框架相对较少是吧。

A: “Framework? Like MFC?”

A さん:“框架?像 MFC 一样的东西吗?”

我”操”

※ 从2001年Smarty和Apache Struts发布以来,Web框架开始普及,而在2004年Ruby on Rails发布后,开始出现了许多日语化的选项。
※ PHP框架的发展相对滞后是由于其面向对象功能的不足和能够直接在HTML中编写程序的灵活性。然而,随着PHP5的发布,功能改进和速度提升推动了许多MVC框架的诞生。

结尾部分

我过去的20年,有些事物发生了变化,也有些事物保持不变。

Aさん表示充满喜悦,因为之前辛苦学习的PHP知识还保留下来了。

我:“哎呀,身体透明了吗?”

Aさん:“看来是分别的时刻了。希望20年后我们能够再次相聚。”

那位叫做A的人說完後,他的身體無聲地消失了。


「小明,你刚才在跟谁说话?」

当回首时,我看到了CTO的A先生站在那里。

不,这只是我自言自语而已。

A: “そうか。疲れが溜まってるんじゃないのか?今日は帰っていいぞ”
A: “噢,是这样。是不是你累积了疲劳?今天可以回家了哦。”

我很好

我非常喜欢PHP。

完成

bannerAds