为什么开发者对PHP又爱又恨

受人尊敬的服务器端脚本语言PHP,因在web开发中的应用而知名。首次由Rasmus
Lerdorf在1995年发布,受WordPress和Facebook的影响而变化着,据W3Techs报道,82%网站的服务器端编程语言是PHP。这门语言在编程语言受欢迎程度排名上,稍微落后于Java,在竞争对手Tiobe排行榜降到第六名。做为高性能的升级版本PHP
7,预期在2015年发布。

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

然而,就像任何语言,它也有支持者和反对者。下面解释了支持者声援PHP、和持不同意见者痛批它的原因。

《现代PHP之路》可以当作是一份对 PHP
新特性的教程,它将向你介绍各种实用的社区标准,最佳实践;并教会你如何利用这些知识和可互操作的组件来构建和部署不可思议的
PHP 应用。

好的:流行、入门快

“PHP是目前最流行的web开发语言,”PHP工具提供商Zend
Technologies公司【注1】CEO Andi Gutmans说。在New Media
Campaings供职的开发者Josh
Lockhart,也是一名作家,强调了PHP较小的学习曲线、易于部署和快速的开发迭代。Lockhart说,“PHP是最易理解的web开发语言之一,它被安装在大部分服务器上(包含大部分共享主机)。因为有优秀的在线文档和最新的在线资源,学习起来相对容易。”

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帮助你赚钱、找到一份在服务器端的工作”,Gutmans说。在上周的Dice.com技术工作网站上的快速研究,找到了3,366份PHP相关的工作。与17,418份Java工作相比显得很平淡,紧追Perl(4,300)和Python(5,429),但是高于Ruby(2,973),甚至包括Objective-C(985)。Lockhart把PHP看做使用频率最高的语言之一,尽管它和Ruby、Python、Go和Rust之类的语言比起来,有些保守。

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
语言规范保证了这两个引擎之间基本的兼容性。

好的:继续在发展

这门语言自诩有闭包和命名空间之类的现代功能,还有性能和现代框架。正如Gutmans所指出的,“一些想离开的人在PHP能提供什么上面所受到的必要教育不多。”Lockhart说,开发者正在意识到,PHP有着强大的现代特性以及合适的面向对象编程模型。即将到来的版本7,在应用程序上提供了巨大的性能提升。Lockhart指出,Facebook对PHP的增强,包含了HHVM虚拟机和Hack语言【注2】。

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。

坏的:抱怨设计、缺乏重心

博主Eevee在2012年反对这门语言的公开信《PHP:不规则的糟糕设计》中说道,“事实上PHP里的每个特性都多多少少是不规则的”。Eevee不仅仅给这门语言差评,而且包括框架和生态系统。根据该博主说的,这门语言不是可预期的、一致的,而是充满了让人诧异和不一致的地方。在批评中,PHP被称作不透明的,没有默认的堆栈跟踪,一直承受着复杂的、功能不佳的类型,“没有清晰的设计哲学。早期的PHP受到了Perl的激励;带有‘out’参数的庞大的stdlib来自于C;面向对象部分模仿着C++和Java设计。”

Lockhart承认,Eevee的反PHP言论有些“夸大了事实本质”。尽管是一名PHP支持者,Lockhart在被问及时,还是足够和蔼地列出了批判:

  • 这门语言是不一致的,特别是函数名称和参数顺序。“这很容易修正,因此这不是个大问题。”
  • PHP仍然有很多遗留包袱,像全局变量、魔术引用等等。“这些坏的实践正在缓慢地从语言中修剪,但是在它们消失之前,它们还会怂恿愚昧的开发者坚持不好的实践。”
  • PHP不像其它语言那样专注,Lockhart将其归咎于“受到委员会驱动的、长期都是一块一块的”。

  • 注1:Zend Technologies 公司是一家互联网基础架构软件公司。Zend
    Technologies最为人们熟知的是它的两个奠基人:Andi Gutmans和Zeev
    Suraski,他们与其他以色列程序员一起,发展了由Rasmus
    Lerdorf开创的PHP语言。
  • 注2:Hack,一种开源脚本语言,运行在HHVM虚拟机上,主要开发者为Facebook。在2014年3月20日正式发布。在发布前,Facebook已经在它的网站上广泛使用及测试。

发表评论

电子邮件地址不会被公开。 必填项已用*标注