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的这一改进也许会迎合这一需要,解决语言自身在这方面的薄弱之处。
从消极的方面来说,为开发者奉献一个更加类似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的创造维护者们似乎选择了后一种策略--几乎重写解释引擎的面向对象模型,加强语言的面向对象特性。我个人认为这样的选择是有一定的理由的:
PHP在适应快速web编程方面似乎已经做得很好,在现有语言架构基础上对于此方面已经不可能有太大改变(能够做的仅仅是修改、增删一些核心函数以及按部就班的增加更多的扩展函数库),而PHP必须要发展…… J
大部分人都意识到了PHP的局限性,它的创造维护者们更加清楚--假如PHP能够在企业级应用中获得重视,那将是一次更大的胜利(对于开源软件的拥护者来说也许意义更深远)。提升其在该领域竞争力的捷径也许就是Zend Engine 2.0设计蓝图中呈现的内容--为这个面向过程的相对传统的语言添加全新的面向对象模型,使得开发者能够容易的采用面向对象编程方法。
不过非常遗憾的是,试图进入企业级计算领域的PHP欠缺的还太多--没有足够的商业支持,大量的扩展模块处于试验阶段而其中的一些需要被用来在企业级应用中担当重任,对于系统架构的规划和支持不力等等,还有也许是最重要的是商业界的观念能否接受开源而不是商业支持的编程语言构建整个商业系统(不过Linux的应用似乎正在展示美好的前景,但仅仅是前景而已)。即使是乐观的PHP支持者(比如我自己),对于在企业级计算中使用PHP,还是持怀疑态度--即使是Zend Engine 2.0如设计蓝图所述的被推出之后。
因此,我对采用Zend Engine 2.0的新版PHP并不抱有太大的希望:
它的适用处还是在于快速web编程环境,比如互联网站等;选择PHP作为构建关键商业系统的主要支持语言,需要非常非常慎重。
虽然Zend Engine 2.0着重加强了面向对象特性(也许PHP的创造维护者们也会大力提倡使用它们),但是对于现有的大部分PHP开发者而言,用现在的面向过程的风格书写PHP程序并不会受到任何影响(Zend Engine 2.0也非常周到的考虑到了向下兼容的问题)--也就是说,表面上看PHP会由于被赋予了面向对象的特征而更加强大,实际上在大多数开发者手中采用Zend Engine 2.0和1.0版本(支持现在的PHP 4的解释引擎)的PHP并没有什么区别。
当然还是有一些值得期待的地方:
快速web编程环境同样需要良好的建模,面向对象的设计和实现要比面向过程的或者说是面向页面间的方法好得多。部分PHP开发者(包括PHP的创造维护者们)已经在大力提倡使用语言本身的面向对象特性(PEAR就是很好的例子),Zend Engine 2.0将会为他们带来福音--更好的面向对象模型,可以几乎不受限制的采用面向对象设计和实现(而现在的PHP由于面向对象支持的极不完全,根本作不到这一点);同时在对象的使用性能上能够得到一定提升。
违例处理机制的引入对于PHP项目会带来一定积极的影响,可以有效的提高代码效率,并鼓励妥善的处理错误。
由于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,即使未来的版本会极大的加强面向对象这一流行的特性。

iPhone16系列将在全线型号也采用堆叠式后置感光元件设计。该设计在今年的iPhone15标准版上已有类似的应用。今年的标准版iPhone15和iPhone15Plus预期将配备一个4800万像素的后置镜头,并使用能够捕捉更多光线的堆叠式CMOS影像感光元件(CIS)设计。新感光元件设计的产能问题,导致苹果无法在所有iPhone15型号上全面采用此设计。尽管索尼的高端CIS产能预期将在2024年前持续紧张,但Apple已提前确保了大部分的Sony订单。根据郭明錤的说法,索尼产能紧张,将对竞争对

在线投票系统的设计与实现随着互联网的不断发展,在线投票系统成为了一种非常方便和高效的方式来进行民意调查和选举。本文将介绍在线投票系统的设计和实现,并附带一些代码示例。一、系统设计功能需求分析在线投票系统主要具备以下功能:用户注册与登录:用户可以通过注册账号并登录系统来参与投票活动。创建投票:管理员可以创建投票并设定投票的相关参数,如投票主题、选项内容和投票截

随着互联网技术的发展,RESTful风格的API设计成为了最为流行的一种设计方式。而Java作为一种主要的编程语言,也越来越多地在RESTful接口的开发中扮演着重要的角色。在JavaAPI开发中,如何设计出优秀的RESTful接口,成为了一个需要我们深入思考的问题。RESTful接口的基本原则首先,我们需要了解RESTful接口的基本原则。REST即Re

随着互联网技术的不断发展,面向服务架构(SOA)的理念越来越受到人们的重视。在这个背景下,Go语言作为一种高效、可靠的编程语言,也逐渐成为了很多企业与开发者实现SOA的首选语言。本文将深入探讨Go语言中的面向服务架构设计。一、SOA简介面向服务架构是一种软件设计的架构风格,它将复杂的系统拆分成多个相互独立、可复用的服务,每个服务都有独立的功能实现,并使用标准

随着智能车辆在网联化、智能化及架构技术的发展,汽车无论是在固件还是软件上都已经不可逆转的需要进行软件迭代升级。要求在汽车生命周期内会不断的基于汽车OTA能力为整车提供软件升级、固件升级、售后服务等服务能力,可以说,汽车的智能化更迭对于OTA升级能力已经成为不可或缺的主流趋势。本文章将针对自动驾驶汽车的软件升级现状需求及监管要求等进行详细的描述。意在帮助读者整体了解自动驾驶中的软件升级过程原理、准入要求及其应对策略。1整车软件升级技术优势首先,软件定义汽车推动了整车软件升级技术的发展与应用,通过整

RESTfulAPI是目前Web架构中较为常用的一种API设计风格,它的设计理念是基于HTTP协议的标准方法来完成Web资源的表示与交互。在实现过程中,RESTfulAPI遵循一系列规则和约束,包括可缓存、服务器-客户端分离、无状态性等,这些规则保证了API的可维护性、扩展性、安全性以及易用性。接下来,本文将详细介绍RESTfulAPI的设计及其实现方

在互联网时代,文章阅读与分享已经成为人们日常生活中必不可少的一部分。然而,对于文章的点赞与收藏功能来说,用户体验体现的非常关键。而Redis作为一个高性能的键值存储数据库,在文章点赞与收藏功能的实现中有很大的优势。本文将分享一个基于Redis实现的文章点赞功能设计。功能设计文章点赞功能的设计过程中,需要考虑到许多因素。首先,需要将点赞接口暴露给用户,用户可随

如何设计一个支持多用户在线答题的系统,需要具体代码示例随着互联网的发展,在线学习和在线考试的需求越来越大。一个支持多用户在线答题的系统可以有效地满足用户的需求,并提供便捷的学习和考试方式。本文将介绍如何设计一个支持多用户在线答题的系统,并提供具体的代码示例。一、系统设计功能需求支持多用户注册、登录和管理的系统,用户可以创建、编辑和删除自己的题目集,其他用户可


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver CS6
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版
好用的JavaScript开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。