PHP 的前世今生

翻译自 《Modern PHP》by Josh Lockhart

PHP 现在正在经历着一场自己在编程语言中的文艺复兴。通过增加一系列新的特性(比如 namespaces,traits,closures,build-in opcode cache 等),PHP 逐渐演变成一个现代化的脚本语言。同时,PHP的整个生态系统也在因此而转变。PHP 程序员们不再过度依赖那些庞大而臃肿的框架,而是更多的去使用更加轻量级的专用组件。Composer 依赖管理工具也彻底改变了人们构建 PHP 应用的方式;它将我们从那些框架的围墙中解脱出来,让我们可以自由混搭各种可相互操作的组件,从而搭建出最能符合我们需求的 PHP 应用。当然,如果没有 PHP Framework Interop Group 负责提出与优化的各种标准,那么这些组件之间的互操作性也是几乎不可能实现的。

《Modern 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(phpdaily)

原文发表时间:2015-09-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

研究人员发现可公开访问的包含 1100 万条记录的 MongoDB 数据库

安全研究员Bob Diachenko发现了一个可公开访问的MongoDB数据库,其中包含43.5 GB的数据和10.999.535的Yahoo电子邮件地址。除其...

11330
来自专栏DeveWork

高效 Mac 人士必备:实现工作/家庭间网络环境切换的自动化

不知在看本文的你是否正处于如下情形:自带的Mac 设备(特指MacBook/Air/Pro 等苹果笔记本)在公司跟家里,因为使用的网络环境不同常常需要来回修改。...

33080
来自专栏CSDN技术头条

用最少的钱,实现工程效率实践

研发团队的工程效率实践,现在越来越多的人开始谈论这个话题,但是真真能实操的还本场 Chat 侧重于实践,不会有抽象的概念和理论知识。

20330
来自专栏开源项目

走过微软20年,埋头并发编程15年,如何减少代码的认知负荷?| 码云周刊

每周为您推送最有价值的开源技术内参! 技术干货 从Visual Studio看微软20年技术变迁 spring cloud netflix 微服务使用实例 20...

602130
来自专栏信安之路

Red Team 工具集之信息收集

上图是一个 Red Team 攻击的生命周期,整个生命周期包括:信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析(在这个基础上...

21300
来自专栏程序源代码

springboot实例工程案例(含源码)

引: 最近朋友那边要我给他开发一套JAVA WEB 后台信息管理系统。他要求时间短,任务重,但在 主要业务模板相对比较简单:主要是用于APP后台...

83750
来自专栏Java架构师学习

数据库高可用实战案例:架构优化背景前期调研详细调研测试过程实施过程细节问题处理

26560
来自专栏Vamei实验室

Linux简介与厂商版本

1. Linux简介 Linux可以有狭义和广义两种定义。狭义来说,Linux实际上指Linux kernel (内核)。内核负责管理硬件,并为上层应用提供接口...

27990
来自专栏Java架构师历程

1、微服务简介

如今微服务倍受关注:文章、博客、社交媒体讨论和会议演讲。微服务正在迅速朝着加德纳技术成熟度曲线(Gartner Hype cycle)的高峰前进。与此同时,也有...

20410
来自专栏ThoughtWorks

微网关与服务啮合 | 洞见

技术雷达:现在越来越多的大型组织在向更加自组织的团队结构转型,这些团队拥有并运营自己的微服务,但他们如何在不依赖集中式托管的基础架构下,确保服务之间必要的一致性...

39450

扫码关注云+社区

领取腾讯云代金券