Zend Engine是PHP语言的语法解释核心,它的发展变化必然会极大的影响PHP的语言特征和执行特性。Zend Engine 2.0在众人期待中尚未推出,但是从其释出的未来蓝图(草稿)中可以推测出一些PHP的将来模样。
一些杂谈
首先是本文写作的初衷。我拿到关于Zend Engine 2.0的设计蓝图文档已经有一段时间了(现在大家也可以去参考资料中的地址下载回来看看),看完之后就有了写一篇评论的冲动--因为根据文档的描述下一代的PHP将是一种更符合现有面向对象开发习惯的语言,至少是被更多的赋予了面向对象特性。但是随之带来的问题就是对于PHP这样一个以Web快速开发为初始目标的语言是否值得将自己修饰得面面俱到?这个问题看来是需要一些评论文章来讨论的,我也很愿意提出自己的观点。但是后来一些繁忙的事情就将这个冲动一点点又打回了肚里,直到最近一段时间又想起,于是再拜读几遍设计蓝图文档,遂有此文。(刚拿到这份英文文档的时候我还有将这份设计蓝图文档翻译到中文的打算,但是考虑到一是并非最终蓝图,二是大家都应该培养直接阅读原文的习惯,三是翻译总是不可避免会带来一些晦涩的地方,于是暂时作罢。不过写成此文的时候,还是决定\"冒险\"翻译一次,不能准确达意之处还请各位不吝指正。)
其次是对本文讨论焦点的解释--在这篇评论中我将主要针对将来的PHP中得以大大加强的面向对象特性进行评述。如果你是PHP的开发者,那么我猜想你应该了解一些PHP语言中的面向对象特性;但是由于一般PHP用于\"极端快速开发环境\"(这是我自己生造出的一个词语,表示进行一些以客户为导向的网站开发的情况,特点就是工期非常短且客户要求不甚明确),所以真正大量使用其对象特性的开发者以及开发项目并不是很多;另外,现有PHP对象模型相对C++和Java的弱势,也限制了这方面特性的使用。不过在PHP的将来版本中,修改重点就在于语言中的面向对象模型,完善现有版本中许多不良的特性并加入其他特性。因此讨论PHP的未来面貌就集中在讨论PHP的面向对象特性方面。
好了,让我们步入正题,看看Zend Engine 2.0的新特性。
归纳Zend Engine 2.0设计蓝图(草稿)
从设计蓝图(草稿)中可以非常清楚的看出下一代Zend Engine是以新的面向对象模型为基础的。如果你曾经使用过现有PHP 4的面向对象特性,那么也许会在找到一点点Java或者C++的感觉的同时觉得有些别扭--不但是在面向对象语法的匮乏上,而且有时会得到意想不到的运行结果--这一切都是因为在现有的支持PHP 4的Zend Engine 1.0中不那么优雅的面向对象模型造成的。
简单说来,下一代的Zend Engine将向Java靠拢,大量借鉴其面向对象模式。从改进特性的类型来看,应该可以分为三类:第一类是对现有面向对象模型的改进和加强,其中包括对构建器和析构器的定义,增加的私有成员变量、静态成员变量、多重继承、过载等面向对象特性;第二类是对于控制流程的修改和增删,比如增加了形如try/catch/throw违例处理机制;第三类是关于函数的修改和增删,比如对于字符串偏移量的增加函数。(对于每一类改进的详细情况,可以查阅参考资料中所列文档。)由此可以看出,通过第一类和第二类的改进,PHP正在逐步将自己改良成一种具有面向对象特征的语言。
不过问题恰恰就产生于此:
以上是我本人的一些\"客观\"分析--所谓\"客观\",就是在写积极方面的时候,将自己伪装成一个Zend Engine 2.0的忠实拥护者;而在写消极方面的时候,则正相反(希望你在读完我的分析之后也可以觉得还算客观)。不过\"客观\"其实也只是为我的\"主观\"论调起到铺垫作用--
问题的关键--我们期望将来的PHP会是什么样子?
其实问题的关键也许在于我们期望的PHP到底会向哪一个方向发展,或者说PHP会致力于哪一个领域。
PHP之所以受到如此大的欢迎,尤其是在几乎没有任何商业支持(Zend公司现在对PHP提供支持,但是其实力和Microsoft以及Sun比较起来实在是微不足道的。)的情况下成为能够与ASP以及JSP抗衡的编程语言,是因为它完全面向现实的快速web编程环境。这一情况在许多的PHP教程中可以清楚的看出--实现一些常用的web功能,采用PHP往往意味着更少的代码量和复杂程度;同时对于某一特定领域的编程,PHP还有扩展模块的函数可供使用(虽然没有商业支持,但是PHP拥有开源软件众多的拥护者支持,他们不但为PHP的产生和发展作出贡献,并且提供了各种扩展模块函数。),这样对于开发者而言,更多的立即可用的并且免费的函数库意味着更少的工作量,所需要做的仅仅是查阅函数手册并妥善使用它们。而PHP的竞争对手们,则显得有些\"学究\"-- 灵活不足而严谨有余,也许大型商业公司的产物在使用的方便程度上确实不及黑客们的得意之作吧。
不过为了适应现实的快速web编程环境,PHP在注重方便易用的时候放弃了一些东西:比如开发者的自有模块的编写和封装(非源码级别),以及面向对象特性(现有版本只是不完全的支持一部分特征)等等--而这些PHP的缺少的却是它的竞争对手们所拥有的(比如ASP可以和COM组件沟通,JSP则可以方便的使用Java Bean;JSP脱胎于Java这一完全面向对象的语言等等),因此PHP通常被排除在构建企业级应用的候选名单之外。
问题的核心已经比较清晰了--现在的PHP发展遇到了一个叉路口:是继续将自己的快速web编程语言的特点发挥得淋漓尽致,还是将自己完善、修饰成一个适应严肃商业环境需求的编程语言?
究竟如何--不抱太大希望
从Zend Engine 2.0的设计蓝图中看来,PHP的创造维护者们似乎选择了后一种策略--几乎重写解释引擎的面向对象模型,加强语言的面向对象特性。我个人认为这样的选择是有一定的理由的:
不过非常遗憾的是,试图进入企业级计算领域的PHP欠缺的还太多--没有足够的商业支持,大量的扩展模块处于试验阶段而其中的一些需要被用来在企业级应用中担当重任,对于系统架构的规划和支持不力等等,还有也许是最重要的是商业界的观念能否接受开源而不是商业支持的编程语言构建整个商业系统(不过Linux的应用似乎正在展示美好的前景,但仅仅是前景而已)。即使是乐观的PHP支持者(比如我自己),对于在企业级计算中使用PHP,还是持怀疑态度--即使是Zend Engine 2.0如设计蓝图所述的被推出之后。
因此,我对采用Zend Engine 2.0的新版PHP并不抱有太大的希望:
当然还是有一些值得期待的地方:
对PHP开发者的一些建议
首先你不需要对未来的PHP有任何的担忧--你所拥有的开发技能在新的版本中仍然适用而且运作得很好(这让我想起Microsoft .net中Visual Basic的尴尬地位--PHP不会这样)。即使你对面向对象一无所知,也可以按照传统的方式(也是大部分市面上讲授PHP开发的书籍中介绍的技术)进行开发。
其次是如果你对PHP的面向对象特性产生了兴趣,或者已经有了积极的探索,那么未来的PHP会更加适合你的口味--你可以完全采用面向对象方法进行项目的分析,然后用PHP轻松的实现你的设计。也许随之而来的还会有一些适用于PHP的建模工具(也许是在现有工具上的增加特性,也许是开发源码社区的又一贡献)更加有利于PHP的面向对象设计和编码。不过对于这一类开发者,需要注意的关键在于--你不是仅仅被局限于PHP的世界中,适合你需要的也许是更加面向对象的C++或Java;也许PHP对于你是最熟悉的,但是C++或Java却是更强大的。
再次是对于那些\"渐有去意\"的PHP开发者(我指的是在PHP无用论调下受到影响准备放弃PHP的开发者),大部分指责PHP的论点都集中在是否具有更大的扩展即是否适合企业级系统构建上--如果你也是为此放弃了PHP,那么就上文的观点,未来的PHP也很少可能成为能够挑战Microsoft以及Sun产品的编程语言--从这个意义上来说你的选择也许是正确的。
最后对于正准备接触PHP的开发者,不管是现有的PHP还是未来的PHP都至少是非常适合web快速开发的编程语言--不过同样原因,如果你在寻找\"重量级\"的可以支持完整商业系统的编程语言,请慎重考虑PHP,即使未来的版本会极大的加强面向对象这一流行的特性。