PHP

大家可以通过阅读本文,学习关于 PHP7.0 的五个方面的内容:PHP7.0 简介、主要新特性、过去几周关于程序员是否采用 php7.0 的意愿调查结果、以上调查结果的分析、以及对 PHP 未来版本的期待。

(一)PHP 7 简介

PHP 7 是 11 年来首次发布的 PHP 主版本,PHP 上一次发布主版本是在 2004 年 ,当时发布的是 PHP 5.0.0。

与这次 PHP 核心开发人员沉睡已久不同,PHP 6 曾立志要让 PHP 支持 Unicode 字符串。然而开发停滞不前,PHP 6 计划在 2010 年被取消了。

自那以后虽然也有一些带着重要新特性的 PHP 版本发布,比如 PHP 5.4,但没有哪个真正称得上主版本。

直到 2010 年 Facebook 为 HipHop 编译器揭开面纱。这款编译器可以将 PHP 转为 C++ 代码,再转为本地机器码,用 C++ 编译器编译。尽管这个想法很好,也改进了 PHP 的性能,但不实用,因为本地机器码编译 PHP 脚本耗时太久。

之后 Facebook 换了另一种方法,他们开发了 HHVM(HipHop Virtual Machine),通过 JIT engine(Just In Time)将 PHP 代码转换为本地机器码。这使得所耗时间大大减少并且性能得到显著改进。

很显然,Facebook 不满意 PHP 的特性,于是在 2014 年启动 Hack 项目,它源于 PHP 语言却有着很多 PHP 没有的特性,比如对所有数据类型都进行更严格的类型检查,以及支持内置异步编程。

不久后 Zend 的 Dmitry Stogov 发布了 PHP 的一个名为 PHPNG 的分支。

(二)PHP 7 的主要新特性

PHPNG 的初衷是做调查,调查 JIT engine 的引入将对基于 PHP 版本的 Zend Engine 有何影响。然而,随着进一步的研究他发现,其他方面的改进能让 PHP 代码运行得更快。

PHPNG 是 PHP 7 的基础,起名叫 PHPNG 是为了避免与被取消的 PHP 6 混淆。

PHP7 新增的其他功能包括:标量值的严格类型、匿名类、嵌套类、编译 PHP 引擎的可能性以及特定程序优化,好比 Wordpress 使用了 Performance Guided Optimizations (PGO)。

PHP 7.0 本来计划在 10 月发布,但是因为一些严重的 bug 所以推迟到了十二月。

(三)PHP7 接受程度调查结果分析

PHP 7 的发布是 PHP 世界近年来最令人激动的事之一,因为对其功能有太多的期待,比如上文提到的那些。

许多开发者迫不及待地使用 PHP7,但不是每个人都能正确地使用它。接下来这个调查就是用于评估 PHP 程序员是否愿意采用 PHP 7。

调查主要围绕三个问题:

  1. 你是否打算在你的生产中使用 PHP 7?
  2. 你是否打算在你的开发环境中使用 PHP 7?
  3. 你生产中所使用的最新版的 PHP 是哪个?

526 位开发者参与该调查,所以以下结果应该能代表许多 PHP 程序员的真实反应:

1.  你是否打算在你的生产中使用 PHP 7?

是的,从 7.0.0 的第一个稳定版上线之前我就开始用了。

21

4%

是的,我打算在官方 7.0.0 版本发布后使用。

104

19. 8%

是的,我将会在官方发布几周后使用。

196

37. 3%

不一定,取决于我的客户。

44

8. 4%

不会,不会很快就用,因为迁移代码需要太多时间。

58

11%

不会,我只打算在将来的项目中使用。

64

12. 2%

不会,除非我的公司强迫我使用,并且不再提供旧的版本。

20

3. 8%

其他

19

3. 6%

2.  你是否打算在你的开发环境中使用 PHP 7?

是的,我一直在使用着。

41

7. 8%

是的,为了测试它的新特性,我试了几次。

60

11. 4%

是的,只要官方 7.0.0 版本发布我就会开始使用。

218

41. 4%

是的,我将会等待几周至几个月,直到我有更多的时间去检查它

112

21. 3%

这取决于我的客户

11

2. 1%

不会,现在不会使用,我只计划在将来的项目中使用

62

11. 8%

不会,除非我的公司强迫我使用它,并且我需要修改我的代码

13

2. 5%

其他

9

2. 7%

3.  你生产中所使用的最新版 PHP 是哪个?

PHP 7.0

10

1. 9%

PHP 5.6

299

56. 8%

PHP 5.5

111

21. 1%

PHP 5.4

59

11. 2%

PHP 5.3

38

7. 2%

PHP 5.2

5

1%

PHP 5.1

0

0%

PHP 5.0

1

0. 2%

PHP 4

0

0%

其他

3

0. 6%

(四)PHP 7 调查结果分析

从第一个问题可看出绝大多数程序员不是早期使用者。他们想使用 PHP 7 但需要过一段时间等 PHP7 稳定后再用。

尽管有 8 个候选发布版本,并且 PHP 测试小组评估 PHP 通过全部测试的可能性很大,但开发者也知道应该会有些 bug 和向后不兼容的更改存在,这些会导致程序员花费相当长的时间,用于 PHP 的最终修复或者基于开发者需要去修改代码。

另外,还有一部分的程序员只想在新项目中使用 PHP 7,因为目前正在进行的这些项目非常重要,因此不能被 PHP7 可能出现的错误影响。

第二个问题是关于 PHP 程序员对 PHP 7 的好奇心有多重。结果显示大部分程序员愿意在开发环境中测试 PHP 7,因为这样更安全。

程序员们已经能够想象一旦他们的代码出现问题,等待他们修复的工作量该是多么的惊人,尤其是那些自己拥有测试套件的程序员,因为他们可能已经看到有很多的测试显示失败。

第三个即最后一个问题,显示了程序员们正在使用的 PHP 版本有多新。

有一小部分的人正在勇敢地在生产中使用 PHP 7。虽然我认为他们不大可能在非常重要的项目中使用 PHP 7 开发。

数据显示了个好消息,绝大部分程序员已经开始使用 PHP 5.6 了。而且在最坏的情况下他们仍然使用 PHP 5.3。这有可能是因为他们的公司不提供其他的版本,或者是因为新版本不适用于他们的代码。

如今几乎每个人使用的版本都不低于 PHP 5.3.11,因为更老的版本里有致命的 bug,这些可能会导致你的服务器崩溃。

也许你很好奇那 3 位选择“其他”的开发者使用的是什么,事实上只有一位准确说了正在使用的是 HHVM。为了使用 HHVM 你需要控制你的托管环境并且需要手工编译它。然而,绝大多数程序员不可能这么做或者没这技术。

(五)PHP 7 的未来

现在 PHP 7 已经正式发布了,你也许会很好奇下一步是什么。以下是一些已在计划内以及我们猜想的特性。

一些新特性的计划我们已经在“Lately in PHP Podcast”中讨论过了。如果你很好奇,你可以追随博客音频或者订阅 YouTube 频道来获取关于 PHP 的最新功能的讨论。

1.  PCO 是加密的 PDO

我们已经知道的是会有一个抽象扩展,名为 PCO,这个类似于 PDO 但是有密码。

2.  PHP 静态代码分析器

Rasmus Lerdorf 还开发了一个工具叫 PHAN,这是个 PHP 静态代码分析器。目的是仅通过分析你的 PHP 代码而不去运行代码,就检测出可能存在的 bug。该工具利用了 PHP 7 中新的 AST(抽象语法树)扩展。

3.  带 async and await 的异步编程

另一种可能性是,PHP 使用 async and await 构造,以提供更好的内置异步编程支持。这使你能够在同一个脚本中运行多并行任务,而不需要等一个任务执行一个任务。

请不要将异步编程与多线程编程混淆。PHP 已经可以使用 pthreads extension.执行多线程编程了。

Async and await 构造最大的优势是不再需要你处理 callback hell。这意味着如果你需要等待一些异步操作,比如访问文件系统、数据库或远程服务器,你只需要使用等待关键字,那么异步操作完成后,脚本将会继续操作下一个语句。

Async and await 构造关键字需要 PHP 有一些重要的改变,因为它需要处理内部事件循环。然而,PHP 开发者已经开始讨论,实施 async and await 以及关键字的构造可能性,因为这些关键字应该在其他开发者开始使用之前被保存。

此外,Facebook Hack 语言也支持 async and await。我猜测 Facebook 是想为 PHP 程序员带来具有 async and await 功能的 PHP。

也许你怀疑 PHP 需要这些构造的必要性,但是一旦你了解他们的优点后,你就会知道他们的重要性。

很多程序员转移到 Node.js,因为 Node.js 支持异步编程。Node.js 目前还不支持 async and await 关键字,但也只是时间问题,因为 async and await 也是 EcmaScript 7 的新特性之一,而且将来的 Node.js 将使用基于 EcmaScript 7 的 JavaScript。

这样的发展被认为更重要。尤其是最近 WordPress 宣布将尽可能删减 JavaScript,包括服务器端的 Node.js 和 React 框架。

显然这是他们对服务器最大利用化的一步,该服务器托管着 Wordpress.com blogs。我不知道 WordPress 社区是否会接受这项目,因为有成千上万的插件依赖于 PHP。

4.  独立的 Web 服务器

PHP 有一个独立的 Web 服务器,但不推荐给生产环境。

一旦 PHP 支持内置异步编程,那用它开发 HTTP Web 服务将更容易,哪怕用纯 PHP 编写,就像是在用 Node.js 一样。

这使得 PHP 的功能更灵活,处理并行请求更高效使用更少内存,尤其是在合并异步编程和基于 pthreads 的多线程编程后之后。

(六)总结

PHP 7 是巨大的飞跃,但世界在不停旋转,因此 PHP 也必须跟上新趋势,比如上文提到的那些。

我们还是要祝贺所有付出时间和精力的开发者,因为是他们使 PHP 如此优秀,比如 PHP 7。

如果你喜欢本文,或者想问一些和 PHP 7 新特性有关的问题并收获回复,请在下方评论。

英文原文:PHP 7 Release Date Arrived: Will Developers Adopt PHP 7?