PHP正在重生。得益于命名空间、性状、闭包和内置的操作码缓存等有用的特性,PHP正在变成一门现代化脚本语言。而且现在的PHP生态系统也在演进。PHP开发者较少依赖于庞大的框架了,更多的是专门的小型组件。依赖管理程序Composer彻底改变了我们构建PHP应用的方式,把我们从框架的封闭环境中解救出来了,让我们可以根据PHP应用的需求混合搭配最适合的PHP互操作组件。如果没有PHP Framework Interop Group提议并监管的社区标准,根本不可能实现组件互操作性。

回顾过去

在探索现代的PHP之前,我们需要先了解PHP的起源。PHP是一本解释型服务端脚本语言,也就是说,编写PHP代码要上传到Web服务器,让解释器执行这些代码。PHP往往在Apache或Nginx等Web服务器中运行,用来执行动态内容。不过PHP也能用来构建强大的命令行应用,(就像base、Ruby、Python一样)。很多PHP开发者并不知道这一点,因此错过了一个十分激动人心的特性。
PHP的历史很混乱。起初, PHP是拉斯姆斯·勒多夫编写的一系列CGI脚本,用于跟踪它在线简历的访问情况。勒多夫把这些CGI脚本命名成为 “Personal Home Page Tools”。这个早期阶段和我们现在熟知的PHP完全不同,勒多夫早期编写的PHP Tools不是一门脚本语言,只是一些工具,提供基本变量,并使用嵌入式HTML句法自动处理表单变量。
1994至1998年间,PHP经过多次修改,甚至还有几次彻底重写。两名来自特拉维夫的开发者(安迪 · 古曼兹和泽埃夫 · 苏拉斯基)与拉斯姆斯 · 勒多夫一起,把PHP从一系列CGI工具变成了一门功能完善的编程语言,句法更一致,还提供了基本的面向对象编程支持。他们把最终产品命名为PHP 3,并在1998年底发布了它。这个新的名称是从旧名称中演化来的,它是 “PHP: Hypertext Preprocessor” 的递归缩写。PHP3 是与我们现在所熟知的PHP最相近的第一个版本,扩展性卓越,支持多种数据库,协议API。PHP3的扩展性吸引了很多新开发者。1998年年底,PHP在全世界的Web服务器中安装的比率已经达到惊人的10%。

审视现在

现在PHP语言发展迅速,由来自全球几十名核心开发者提供支持, 而且开发的方式也发生了变化。过去常见的作法是编写一个PHP文件,使用FTP上传到生产服务器,然后祈祷他能正常运行。这个开发策略非常可怕,但又必须这么做,因为当时没有可用的PHP本地开发环境。
如今,我们都避免使用FTP,转而使用版本控制。版本控制软件(如Git)能帮助我们维护一个可审查的代码历史,让我们可以创建代码分支、复刻(fork)代码和合并代码。得利于虚拟化工具(如Vagrant)以及配置工具(例如ANSI不了、Caef和Puppet),我们能够搭建和生产环境一样的本地开发环境了。我们通过依赖管理工具Composer使用专门的PHP组件。我们的PHP代码遵循PSR,这是由PHP Framework Interop Group管理的社区标准,我们使用PHPUnit等工具彻底测试编写的代码。我们使用PHP的FastCGI进程管理器部署应用,并且放在nginx这样的Web服务器之后。还能通过操作码缓存来提升应用性能。
萨拉·高乐曼和Facebook在2014年的O’Reilly OSCON 大会上发布了第一份PHP规范草案。
随着多个PHP引擎出现,制定一份官方的PHP语言规范越发变得重要了。首个PHP引擎是Zend Engine,这个引擎使用C编写,并在PHP4中引入。Zend Engine是由拉斯姆斯·勒多夫、安迪·古曼兹、泽埃夫·苏拉斯基开发。至今Zend Engine是Zend公司对PHP社区主要的贡献。不过现在出现了第二个PHP引擎——由Feacbook卡覅的HipHop Virtual Machine。语言规范的作用是确保两种引擎具有一致的兼容性。

:::info PHP引擎是解析、解释和执行PHP代码的程序,别把这个和PHP搞混了,PHP一般是指PHP语言。 :::

展望未来

Zend Engine正在迅速改进,提供新的功能和提升性能。这些改进得益于新的竞争者出现,尤其是Feacbook卡覅的HipHOp Virtual Machine和Hack编程语言。
Hack是一门建立在PHP之上的编程语言,引入了静态类型,新的数据结构和额外的接口,同时还能向后兼容现有的动态类型PHP代码。Hack针对的是欣赏PHP快速开发特点,而又需要向静态类型的可预测性和稳定性的开发者。

:::info 后面的内容会比较动态类型和静态类型。二者之间的区别在于合适检查PHP类型,动态类型是在运行时检查类型,而静态类型是在编译时检查类型。更多内容参考12章 :::

HipHOp Virtual Machine(简称HHVM)是PHP和Hack的解释器,使用即时(Just In Time JIT)编译器提升应用性能,并减少内存用量。
预计Hack和HHVM不会取代Zend Engine,不过Facebook这项新的贡献在PHP社区中引起了巨大的轰动。日益激烈的竞争促使Zend Engine核心团队宣布了PHP7的开发计划,生成优化后的Zend Engine和HHVM水平相当。