当前位置:Linux教程 - Php - 是你期待的吗?--- 从Zend Engine 2.0的设计蓝图(草稿)看PHP的将来

是你期待的吗?--- 从Zend Engine 2.0的设计蓝图(草稿)看PHP的将来

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正在逐步将自己改良成一种具有面向对象特征的语言。

不过问题恰恰就产生于此:

  1. 从积极的方面来说,如今的编程世界中更加欢迎具有面向对象特征的语言(即使语言本身并不构建于面向对象基础之上,也可以通过增加定义的对象等手段使得该语言不至于落在潮流之后)--从这一意义上说,Zend Engine 2.0使得PHP对面向对象的支持将从现在的试探性接触转变为将来的全面拥护,看来更加符合编程语言发展的潮流;另外,在构建企业级应用(这也是PHP现在经常被人指责之处)之时,采用面向对象的方法建模和实现已经是事实上的标准,而PHP的这一改进也许会迎合这一需要,解决语言自身在这方面的薄弱之处。
  2. 从消极的方面来说,为开发者奉献一个更加类似Java的新版PHP似乎没有什么意义。PHP被广泛应用的原因,除了源码公开和跨平台等之外,适应互联网站构建的简单、快速的web编程特点恐怕也是重要的一点。极短的学习时间、友好的语言风格(特别是如果你对C比较熟悉)和大量扩充类库函数,足以证明其强大;但是如果将这样的语言的下一版本改造成类似面向对象的语言,不但会使原有的大量开发者在短时间内无所适从,而且非常不利于吸引新的开发者加入--既然有Java这样的语言,何必去学习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的创造维护者们似乎选择了后一种策略--几乎重写解释引擎的面向对象模型,加强语言的面向对象特性。我个人认为这样的选择是有一定的理由的:

  1. PHP在适应快速web编程方面似乎已经做得很好,在现有语言架构基础上对于此方面已经不可能有太大改变(能够做的仅仅是修改、增删一些核心函数以及按部就班的增加更多的扩展函数库),而PHP必须要发展…… J
  2. 大部分人都意识到了PHP的局限性,它的创造维护者们更加清楚--假如PHP能够在企业级应用中获得重视,那将是一次更大的胜利(对于开源软件的拥护者来说也许意义更深远)。提升其在该领域竞争力的捷径也许就是Zend Engine 2.0设计蓝图中呈现的内容--为这个面向过程的相对传统的语言添加全新的面向对象模型,使得开发者能够容易的采用面向对象编程方法。


不过非常遗憾的是,试图进入企业级计算领域的PHP欠缺的还太多--没有足够的商业支持,大量的扩展模块处于试验阶段而其中的一些需要被用来在企业级应用中担当重任,对于系统架构的规划和支持不力等等,还有也许是最重要的是商业界的观念能否接受开源而不是商业支持的编程语言构建整个商业系统(不过Linux的应用似乎正在展示美好的前景,但仅仅是前景而已)。即使是乐观的PHP支持者(比如我自己),对于在企业级计算中使用PHP,还是持怀疑态度--即使是Zend Engine 2.0如设计蓝图所述的被推出之后。

因此,我对采用Zend Engine 2.0的新版PHP并不抱有太大的希望:

  1. 它的适用处还是在于快速web编程环境,比如互联网站等;选择PHP作为构建关键商业系统的主要支持语言,需要非常非常慎重。
  2. 虽然Zend Engine 2.0着重加强了面向对象特性(也许PHP的创造维护者们也会大力提倡使用它们),但是对于现有的大部分PHP开发者而言,用现在的面向过程的风格书写PHP程序并不会受到任何影响(Zend Engine 2.0也非常周到的考虑到了向下兼容的问题)--也就是说,表面上看PHP会由于被赋予了面向对象的特征而更加强大,实际上在大多数开发者手中采用Zend Engine 2.0和1.0版本(支持现在的PHP 4的解释引擎)的PHP并没有什么区别。


当然还是有一些值得期待的地方:

  1. 快速web编程环境同样需要良好的建模,面向对象的设计和实现要比面向过程的或者说是面向页面间的方法好得多。部分PHP开发者(包括PHP的创造维护者们)已经在大力提倡使用语言本身的面向对象特性(PEAR就是很好的例子),Zend Engine 2.0将会为他们带来福音--更好的面向对象模型,可以几乎不受限制的采用面向对象设计和实现(而现在的PHP由于面向对象支持的极不完全,根本作不到这一点);同时在对象的使用性能上能够得到一定提升。
  2. 违例处理机制的引入对于PHP项目会带来一定积极的影响,可以有效的提高代码效率,并鼓励妥善的处理错误。
  3. 由于Zend Engine 2.0面向对象模型的改进,使得PHP调用外部组件(比如COM和Java Bean)更加方便以及合理,在效率上也将得到提高。这一改进也许会增加PHP作为异种系统(比如采用Java开发的系统)前端的可能性(国内的minij2ee项目就是这方面的一个典型)。


对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,即使未来的版本会极大的加强面向对象这一流行的特性。