PHP的版本演进


#1

今天做一下考古,了解下PHP的历史,,也可以从另一个侧面理解为什么PHP源码会是现在这个样子,下面我们就来扒一扒PHP的每个版本:


PHP1

PHP最初是作为一个快速、实用的工具包出现的。1994年,为了在自己的网站上增加一个访客追踪系统,Rasmus Lerdorf编写了PHP的雏形程序,其继承自一个老的工程,被命名为 PHP/FI。最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。Rasmus给这一套脚本取名为“Personal Home Page Tools”。后来,更多的人注意到这个轻巧而简便的程序,并且要求增加更多的功能。为提升效率,Rasmus用C语言重写了这个工具,它可以访问数据库,可以让用户开发简单的动态 Web 程序。后来,Rasmus 发布了PHP/FI的源代码,以便每个人都能使用和改进它。


PHP2

作为一个专为个人主页/表单提供解释程序的程序,PHP/FI已经包含了今天 PHP 的一些基本功能。它有着 Perl 样式的变量,自动解释表单变量,并可以嵌入 HTML。语法本身与 Perl 很相似,但是它很有限,很简单,还稍微有些不协调。

到1997年,Rasmus发布了PHP/FI2.0,也就是它的 C 语言实现的第二版在全世界已经有几千个用户(估计)和大约 50,000 个域名安装,大约是 Internet 所有域名的 1%。此时,PHP/FI2.0 已经吸引了大量的程序开发人员。在众多程序员之中,也包括了Zeev Suraski和Andi Gutmans,他们就是后来PHP3的始作者。由于不满足于PHP/FI在大型项目中的表现,Zeev和Andi作了重大的改进。


PHP3

PHP 3.0 是类似于当今 PHP 语法结构的第一个版本。经过Andi,Rasmus 和 Zeev 一系列的努力,考虑到 PHP/FI 已存在的用户群,他们决定联合发布 PHP 3.0 作为 PHP/FI 2.0 的官方后继版本。它从 PHP/FI 2.0 的名称中移去了暗含“本语言只限于个人使用”的部分。它被命名为简单的缩写“PHP”。这是一种递归的缩写,它的全称是——PHP: Hypertext Preprocessor。

1998年6月,PHP 3.0 的第一个官方正式版本发行,其特色是具有更好的执行效果以及更清晰的结构。另一个强大的功能是它的可扩展性。除了给最终用户提供数据库、协议和 API 的基础结构,它的可扩展性还吸引了大量的开发人员加入并提交新的模块。后来证实,这是 PHP 3.0 取得巨大成功的关键。PHP 3.0 中的其它关键功能包括面向对象的支持和更强大和协调的语法结构。

1998 年末,PHP 的安装人数几近 10,000,有大约 100,000 个网站报告他们使用了 PHP。在 PHP 3.0 的顶峰,Internet 上 10% 的 web 服务器上都安装了它。

不久,Zeev Suraski和Andi Gutmans投入到了全新的PHP的开发之中。设计目标是增强复杂程序运行时的性能和 PHP 自身代码的模块性。


PHP4

新的PHP核心被成为“Zend” (以Zeev和Andi的名字命名)的引擎,成功的实现了设计目标,并在 1999 年中期首次引入 PHP。基于该引擎并结合了更多新功能的 PHP 4.0,在 PHP 3.0 发布两年后,于2000年5月发布了官方正式版本。PHP4的性能较PHP3有着显著的提高。相同的脚本在PHP4中运行,最高可以有近10倍的性能提升。并且Zend提供了的脚本优化器,可以把源程序转为二进制编译代码,提高性能的同时,也保护了程序源码不被暴露。

在PHP4中增加了对各种Web服务器(如Apache、IIS/PWS及OmniHTTPd 等)的支持。此外,PHP4还增加了一些新的语言特性,如丰富的数组操作函数、完整的会话机制、对输出缓存的支持等。PHP4也对一些跨平台的技术提供了扩展支持,如对Adobe PDF、SWF、Java、Microsoft.NET等技术的支持。

PHP4还增加了对类于对象的支持。尽管PHP4在这方面并不完善,但还是大大改善了对面向对象程序设计的支持。PHP4中的Pear库(PHP Extension and Application Repository)就是面向对象的应用与实践的最好例证。

此时,已经有 10,000 名开发人员(估计)和几百万网站报告已安装了 PHP,占整个 Internet 域名的 20%。


PHP5

尽管PHP4的发展是如此迅猛,但较之于其他流行的开发语言还是缺乏一些关键的功能特性,比如,PHP4中的面向对象功能并不完善,也无法实现异常(Exception)的捕捉与处理。因此在一些特殊问题的处理上还是捉襟见肘的。

PHP5 在长时间的开发及多个预发布版本后,于2004年7月发布正式版本。PHP5的最大特点是引入了面向对象的全部机制,并且保留了向下的兼容性。程序员不必再编写缺乏功能性的类,并且能够以多种方法实现类的保护。它的核心是 Zend 引擎 2 代,对全新的PECL模块进行了支持。另外,在对象的集成等方面也不再存在问题。使用PHP5引进了类型提示和异常处理机制,能更有效的处理和避免错误的发生。


PHP7

说起PHP7,大家肯定会问,PHP6去哪儿了?其实,早在2005年的时候,PHP社区发起了PHP6的项目,这个项目旨在为 PHP提供完全内置的unicode的支持。但由于种种困难,该项目最终于2010年取消。虽然PHP6这个项目取消了,但大量的功能已经在PHP5.x 版本中得以实现。这里面最重要的就是OOP方面的提升。这也帮助PHP实现了从面向过程到面向对象编程的跨越。市面上也随之出现了一大堆的PHP OOP编程框架。

PHP7项目开始于2014年春节的时候, 鸟哥已经加入到了PHP核心开发项目,在做Opcache JIT项目时候的情况让大家认识到,,基础部分还不够好,并不能很好的支持JIT。所以鸟哥发起了PHP解释引擎重构的项目,叫做PHPNG。很快鸟哥的项目组取得了非凡的成就,PHP开发社区的绝大部分人都支持了PHPNG项目, 并决定以PHPNG为基础, 开始新版PHP的开发,也就是我们现在说的PHP7版本。

2015年12月,PHP编程语言全新的一个版本,PHP 7.0.0 正式发布。其主要在性能方面获得了极大的提升。官方文档显示,PHP7可以达到PHP5.x版本两倍的性能。同时还对语法做了梳理,提供了很多其他语言流行的语法格式。难能可贵的是,做了如此大的改动,PHP7的兼容性还是非常好的。对于绝大多数的应用来讲,可以不用做修改即可迁移到PHP7版本(然而写扩展的同学可能会苦逼一点)。


再转载一个娱乐图文版的










最后感慨一下,有时面对项目里难以理解的写法和设计,看一眼release history就能理解了:joy: