PHP 现在正在经历着一场自己在编程语言中的文艺复兴。通过增加一系列新的特性(比如 namespaces,traits,closures,build-in opcode cache 等),PHP 逐渐演变成一个现代化的脚本语言。同时,PHP的整个生态系统也在因此而转变。PHP 程序员们不再过度依赖那些庞大而臃肿的框架,而是更多的去使用更加轻量级的专用组件。Composer 依赖管理工具也彻底改变了人们构建 PHP 应用的方式;它将我们从那些框架的围墙中解脱出来,让我们可以自由混搭各种可相互操作的组件,从而搭建出最能符合我们需求的 PHP 应用。当然,如果没有 PHP Framework Interop Group 负责提出与优化的各种标准,那么这些组件之间的互操作性也是几乎不可能实现的。
《现代PHP之路》可以当作是一份对 PHP 新特性的教程,它将向你介绍各种实用的社区标准,最佳实践;并教会你如何利用这些知识和可互操作的组件来构建和部署不可思议的 PHP 应用。
PHP 的过去
在开始学习现代 PHP 之前,我们应该先了解一下 PHP 的起源。PHP 是一种服务器端的解释型脚本语言。也就是说你写好了 PHP 代码,要将它上传到服务器上,然后通过 PHP 解释器来执行你的代码。PHP 通常被用于像 Apache 或者 Nginx 这样的 Web 服务器来提供动态的内容。当然,PHP 也可以被用来创建强大的命令行程序(就像 bash,Ruby,Python等等)。许多 PHP 程序员由于不了解这一点而错过了好多让人激动的功能。当然,这些程序员不包括你在内。:)
你可以通过官方网页来了解 PHP 的历史。在这里我不打算再重复已经被 Rasmus Lerdorf(PHP 之父)说过的话。我想说的是 PHP 有一个混乱的过去。PHP 最初是由 Rasmus Lerdorf 写的一套简单的 CGI 脚本,用来跟踪访问他主页的人们的信息。Lerdorf 给他的这套脚本命名为 “个人主页工具集”(Personal Home Page Tools)。这套代码跟我们现在所说的 PHP 完全不同,甚至根本不能算是一种脚本语言,而只是一个简单的工具,可以提供一些简单的变量,自动解释表单变量,并可以嵌入 HTML。
在1994年到1998年之间,PHP 经历了数不清的改进,甚至还有好几次完全推倒重写。Andi Gutmans 和 Zeev Suraski,两位当时还是 Tel Aviv 公司的程序员,也加入了 Rasmus Lerdorf 的队伍,逐渐将 PHP 从一套简单的 CGI 工具转变成一个完整的编程语言,让 PHP 有了比较统一的语法和简单的面向对象支持。他们将最终的产品命名为 PHP3, 并在1998年下半年正式发布。这个新的命名跟之前的名字没有什么联系,而是 “PHP:Hypertext Preprocessor” 的递归缩写形式。PHP3 是第一个长的有点像我们现在所说的 PHP 的版本。它对各种数据库,协议和API有着卓越的可扩展性。PHP3 的这种可扩展性吸引了更多的开发者加入到这个项目中来。到1998年底,PHP 已经在全世界的 Web 服务器中占有了 10% 的份额。
PHP 的现在
现在,PHP 语言正在来自世界范围的许多开发团队的支持下快速发展。整个开发的流程也有了一些变化。在过去,一般的开发过程就是先写好 PHP 代码,将文件上传到服务器,然后开始祈祷一切都能正常运行。这是一个很不好的开发流程,但是,在没有可用的本地开发环境的情况下,也只能不得已而为之。
现在的开发流程使用版本控制工具取代了过去那种FTP的方式。使用 Git 这样的版本控制工具可以维护一个具有历史记录的代码库,你也可以很容易的创建新的代码分支或者合并不同的代码分支。使用 Vagrant 这样的虚拟化工具和 Ansible,Chef 或者 Puppet 这样的自动配置工具可以虚拟出跟生产环境一致的本地开发环境。通过 Composer 依赖管理工具我们可以利用专用的 PHP 组件。我们的 PHP 代码遵循 PSRs - 由 PHP Framework Interop Group 管理的社区标准。我们可以利用 PHPUnit 这样的工具彻底的测试我们的代码。我们将代码部署在运行于像 nginx 这样的 Web 服务器之后的 PHP FastCGI 进程管理器中。我们也可以通过 opcode 缓存来提升应用的执行效率。
同时值得一提的是,直到2014年,PHP 终于有了一份官方的语言规范草案。
Sara Golemon 和 Facebook 在 O‘Reilly 的 2014 OSCON 会议上宣布了第一份 PHP 规范草案。你可以在 PHP internals mailing list 中查看这份官方声明,也可以在 Github 上查看 PHP 语言规范。
由于有多个 PHP 引擎的竞争,使得官方的 PHP 语言规范文件就显得非常重要。最初的 PHP 引擎是 Zend Engine,它是用 C 语言写的一个 PHP 解释器,并从 PHP4 开始使用。Zend Engine 是由 Rasmus Lerdorf,Andi Gutmans 和 Zeev Suraski 创建的,它也是 Zend 公司对 PHP 社区的主要贡献。不过,现在有了第二个主要的 PHP 引擎 - 由 Facebook 开发的 HipHop Virtual Machine。所以官方的 PHP 语言规范保证了这两个引擎之间基本的兼容性。
PHP 的未来
Zend 引擎正在添加新特性和改进执行效率等方面快速发展,这可能是因为他们感受到了来自于 Facebook 的 HipHop Virtual Machine 引擎和 Hack 编程语言的竞争压力。
Hack 是一个基于 PHP 的新的编程语言。它在保持了对 PHP 动态类型的向后兼容的同时,引入了静态类型,新的数据结构和更多的接口。Hack 的目标群体是那些即喜欢 PHP 语言快速的开发效率,又希望用静态类型带来对程序的可预测性和稳定性的程序员们。
HipHop Virtual Machine(HHVM)是一个 PHP 和 Hack 的解释器,它使用实时的 (just in time)JIT 编译机制来提升应用的执行效率,并减少对内存的占用。
虽然并不能说 Hack 和 HHVM 即将取代 Zend 引擎,但是 Facebook 的参与在 PHP 社区引起了巨大的影响。更加激烈的竞争使得 Zend Engine 核心团队不得不宣布 PHP7,一个优化的 Zend Engine,据说将可以与 HHVM 相媲美。
对于 PHP 开发者来说,这是一个让人激动的时代。PHP 社区从来没有像现在这样有活力,充满乐趣和有创造性。希望这个系列可以帮助大家更好的去认识现代 PHP。