明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

是你期待的嗎? 從Zend Engine 2.0的設(shè)計(jì)藍(lán)圖(草稿)看PHP的將來(lái)

[摘要]一些雜談 首先是本文寫作的初衷。我拿到關(guān)于Zend Engine 2.0的設(shè)計(jì)藍(lán)圖文檔已經(jīng)有一段時(shí)間了(現(xiàn)在大家也可以去參考資料中的地址下載回來(lái)看看),看完之后就有了寫一篇評(píng)論的沖動(dòng)--因?yàn)楦鶕?jù)文檔的描述下一代的PHP將是一種更符合現(xiàn)有面向?qū)ο箝_(kāi)發(fā)習(xí)慣的語(yǔ)言,至少是被更多的賦予了面向?qū)ο筇匦。但?..
一些雜談
首先是本文寫作的初衷。我拿到關(guān)于Zend Engine 2.0的設(shè)計(jì)藍(lán)圖文檔已經(jīng)有一段時(shí)間了(現(xiàn)在大家也可以去參考資料中的地址下載回來(lái)看看),看完之后就有了寫一篇評(píng)論的沖動(dòng)--因?yàn)楦鶕?jù)文檔的描述下一代的PHP將是一種更符合現(xiàn)有面向?qū)ο箝_(kāi)發(fā)習(xí)慣的語(yǔ)言,至少是被更多的賦予了面向?qū)ο筇匦。但是隨之帶來(lái)的問(wèn)題就是對(duì)于PHP這樣一個(gè)以Web快速開(kāi)發(fā)為初始目標(biāo)的語(yǔ)言是否值得將自己修飾得面面俱到?這個(gè)問(wèn)題看來(lái)是需要一些評(píng)論文章來(lái)討論的,我也很愿意提出自己的觀點(diǎn)。但是后來(lái)一些繁忙的事情就將這個(gè)沖動(dòng)一點(diǎn)點(diǎn)又打回了肚里,直到最近一段時(shí)間又想起,于是再拜讀幾遍設(shè)計(jì)藍(lán)圖文檔,遂有此文。(剛拿到這份英文文檔的時(shí)候我還有將這份設(shè)計(jì)藍(lán)圖文檔翻譯到中文的打算,但是考慮到一是并非最終藍(lán)圖,二是大家都應(yīng)該培養(yǎng)直接閱讀原文的習(xí)慣,三是翻譯總是不可避免會(huì)帶來(lái)一些晦澀的地方,于是暫時(shí)作罷。不過(guò)寫成此文的時(shí)候,還是決定"冒險(xiǎn)"翻譯一次,不能準(zhǔn)確達(dá)意之處還請(qǐng)各位不吝指正。)

其次是對(duì)本文討論焦點(diǎn)的解釋--在這篇評(píng)論中我將主要針對(duì)將來(lái)的PHP中得以大大加強(qiáng)的面向?qū)ο筇匦赃M(jìn)行評(píng)述。如果你是PHP的開(kāi)發(fā)者,那么我猜想你應(yīng)該了解一些PHP語(yǔ)言中的面向?qū)ο筇匦;但是由于一般PHP用于"極端快速開(kāi)發(fā)環(huán)境"(這是我自己生造出的一個(gè)詞語(yǔ),表示進(jìn)行一些以客戶為導(dǎo)向的網(wǎng)站開(kāi)發(fā)的情況,特點(diǎn)就是工期非常短且客戶要求不甚明確),所以真正大量使用其對(duì)象特性的開(kāi)發(fā)者以及開(kāi)發(fā)項(xiàng)目并不是很多;另外,現(xiàn)有PHP對(duì)象模型相對(duì)C++和Java的弱勢(shì),也限制了這方面特性的使用。不過(guò)在PHP的將來(lái)版本中,修改重點(diǎn)就在于語(yǔ)言中的面向?qū)ο竽P,完善現(xiàn)有版本中許多不良的特性并加入其他特性。因此討論P(yáng)HP的未來(lái)面貌就集中在討論P(yáng)HP的面向?qū)ο筇匦苑矫妗?br>
好了,讓我們步入正題,看看Zend Engine 2.0的新特性。

歸納Zend Engine 2.0設(shè)計(jì)藍(lán)圖(草稿)
從設(shè)計(jì)藍(lán)圖(草稿)中可以非常清楚的看出下一代Zend Engine是以新的面向?qū)ο竽P蜑榛A(chǔ)的。如果你曾經(jīng)使用過(guò)現(xiàn)有PHP 4的面向?qū)ο筇匦裕敲匆苍S會(huì)在找到一點(diǎn)點(diǎn)Java或者C++的感覺(jué)的同時(shí)覺(jué)得有些別扭--不但是在面向?qū)ο笳Z(yǔ)法的匱乏上,而且有時(shí)會(huì)得到意想不到的運(yùn)行結(jié)果--這一切都是因?yàn)樵诂F(xiàn)有的支持PHP 4的Zend Engine 1.0中不那么優(yōu)雅的面向?qū)ο竽P驮斐傻摹?br>
簡(jiǎn)單說(shuō)來(lái),下一代的Zend Engine將向Java靠攏,大量借鑒其面向?qū)ο竽J。從改進(jìn)特性的類型來(lái)看,應(yīng)該可以分為三類:第一類是對(duì)現(xiàn)有面向?qū)ο竽P偷母倪M(jìn)和加強(qiáng),其中包括對(duì)構(gòu)建器和析構(gòu)器的定義,增加的私有成員變量、靜態(tài)成員變量、多重繼承、過(guò)載等面向?qū)ο筇匦;第二類是?duì)于控制流程的修改和增刪,比如增加了形如try/catch/throw違例處理機(jī)制;第三類是關(guān)于函數(shù)的修改和增刪,比如對(duì)于字符串偏移量的增加函數(shù)。(對(duì)于每一類改進(jìn)的詳細(xì)情況,可以查閱參考資料中所列文檔。)由此可以看出,通過(guò)第一類和第二類的改進(jìn),PHP正在逐步將自己改良成一種具有面向?qū)ο筇卣鞯恼Z(yǔ)言。

不過(guò)問(wèn)題恰恰就產(chǎn)生于此:

從積極的方面來(lái)說(shuō),如今的編程世界中更加歡迎具有面向?qū)ο筇卣鞯恼Z(yǔ)言(即使語(yǔ)言本身并不構(gòu)建于面向?qū)ο蠡A(chǔ)之上,也可以通過(guò)增加定義的對(duì)象等手段使得該語(yǔ)言不至于落在潮流之后)--從這一意義上說(shuō),Zend Engine 2.0使得PHP對(duì)面向?qū)ο蟮闹С謱默F(xiàn)在的試探性接觸轉(zhuǎn)變?yōu)閷?lái)的全面擁護(hù),看來(lái)更加符合編程語(yǔ)言發(fā)展的潮流;另外,在構(gòu)建企業(yè)級(jí)應(yīng)用(這也是PHP現(xiàn)在經(jīng)常被人指責(zé)之處)之時(shí),采用面向?qū)ο蟮姆椒ń:蛯?shí)現(xiàn)已經(jīng)是事實(shí)上的標(biāo)準(zhǔn),而PHP的這一改進(jìn)也許會(huì)迎合這一需要,解決語(yǔ)言自身在這方面的薄弱之處。
從消極的方面來(lái)說(shuō),為開(kāi)發(fā)者奉獻(xiàn)一個(gè)更加類似Java的新版PHP似乎沒(méi)有什么意義。PHP被廣泛應(yīng)用的原因,除了源碼公開(kāi)和跨平臺(tái)等之外,適應(yīng)互聯(lián)網(wǎng)站構(gòu)建的簡(jiǎn)單、快速的web編程特點(diǎn)恐怕也是重要的一點(diǎn)。極短的學(xué)習(xí)時(shí)間、友好的語(yǔ)言風(fēng)格(特別是如果你對(duì)C比較熟悉)和大量擴(kuò)充類庫(kù)函數(shù),足以證明其強(qiáng)大;但是如果將這樣的語(yǔ)言的下一版本改造成類似面向?qū)ο蟮恼Z(yǔ)言,不但會(huì)使原有的大量開(kāi)發(fā)者在短時(shí)間內(nèi)無(wú)所適從,而且非常不利于吸引新的開(kāi)發(fā)者加入--既然有Java這樣的語(yǔ)言,何必去學(xué)習(xí)PHP呢?

以上是我本人的一些"客觀"分析--所謂"客觀",就是在寫積極方面的時(shí)候,將自己偽裝成一個(gè)Zend Engine 2.0的忠實(shí)擁護(hù)者;而在寫消極方面的時(shí)候,則正相反(希望你在讀完我的分析之后也可以覺(jué)得還算客觀)。不過(guò)"客觀"其實(shí)也只是為我的"主觀"論調(diào)起到鋪墊作用--

問(wèn)題的關(guān)鍵--我們期望將來(lái)的PHP會(huì)是什么樣子?
其實(shí)問(wèn)題的關(guān)鍵也許在于我們期望的PHP到底會(huì)向哪一個(gè)方向發(fā)展,或者說(shuō)PHP會(huì)致力于哪一個(gè)領(lǐng)域。

PHP之所以受到如此大的歡迎,尤其是在幾乎沒(méi)有任何商業(yè)支持(Zend公司現(xiàn)在對(duì)PHP提供支持,但是其實(shí)力和Microsoft以及Sun比較起來(lái)實(shí)在是微不足道的。)的情況下成為能夠與ASP以及JSP抗衡的編程語(yǔ)言,是因?yàn)樗耆嫦颥F(xiàn)實(shí)的快速web編程環(huán)境。這一情況在許多的PHP教程中可以清楚的看出--實(shí)現(xiàn)一些常用的web功能,采用PHP往往意味著更少的代碼量和復(fù)雜程度;同時(shí)對(duì)于某一特定領(lǐng)域的編程,PHP還有擴(kuò)展模塊的函數(shù)可供使用(雖然沒(méi)有商業(yè)支持,但是PHP擁有開(kāi)源軟件眾多的擁護(hù)者支持,他們不但為PHP的產(chǎn)生和發(fā)展作出貢獻(xiàn),并且提供了各種擴(kuò)展模塊函數(shù)。),這樣對(duì)于開(kāi)發(fā)者而言,更多的立即可用的并且免費(fèi)的函數(shù)庫(kù)意味著更少的工作量,所需要做的僅僅是查閱函數(shù)手冊(cè)并妥善使用它們。而PHP的競(jìng)爭(zhēng)對(duì)手們,則顯得有些"學(xué)究"-- 靈活不足而嚴(yán)謹(jǐn)有余,也許大型商業(yè)公司的產(chǎn)物在使用的方便程度上確實(shí)不及黑客們的得意之作吧。

不過(guò)為了適應(yīng)現(xiàn)實(shí)的快速web編程環(huán)境,PHP在注重方便易用的時(shí)候放棄了一些東西:比如開(kāi)發(fā)者的自有模塊的編寫和封裝(非源碼級(jí)別),以及面向?qū)ο筇匦裕ìF(xiàn)有版本只是不完全的支持一部分特征)等等--而這些PHP的缺少的卻是它的競(jìng)爭(zhēng)對(duì)手們所擁有的(比如ASP可以和COM組件溝通,JSP則可以方便的使用Java Bean;JSP脫胎于Java這一完全面向?qū)ο蟮恼Z(yǔ)言等等),因此PHP通常被排除在構(gòu)建企業(yè)級(jí)應(yīng)用的候選名單之外。

問(wèn)題的核心已經(jīng)比較清晰了--現(xiàn)在的PHP發(fā)展遇到了一個(gè)叉路口:是繼續(xù)將自己的快速web編程語(yǔ)言的特點(diǎn)發(fā)揮得淋漓盡致,還是將自己完善、修飾成一個(gè)適應(yīng)嚴(yán)肅商業(yè)環(huán)境需求的編程語(yǔ)言?

究竟如何--不抱太大希望
從Zend Engine 2.0的設(shè)計(jì)藍(lán)圖中看來(lái),PHP的創(chuàng)造維護(hù)者們似乎選擇了后一種策略--幾乎重寫解釋引擎的面向?qū)ο竽P,加?qiáng)語(yǔ)言的面向?qū)ο筇匦浴N覀(gè)人認(rèn)為這樣的選擇是有一定的理由的:

PHP在適應(yīng)快速web編程方面似乎已經(jīng)做得很好,在現(xiàn)有語(yǔ)言架構(gòu)基礎(chǔ)上對(duì)于此方面已經(jīng)不可能有太大改變(能夠做的僅僅是修改、增刪一些核心函數(shù)以及按部就班的增加更多的擴(kuò)展函數(shù)庫(kù)),而PHP必須要發(fā)展…… J
大部分人都意識(shí)到了PHP的局限性,它的創(chuàng)造維護(hù)者們更加清楚--假如PHP能夠在企業(yè)級(jí)應(yīng)用中獲得重視,那將是一次更大的勝利(對(duì)于開(kāi)源軟件的擁護(hù)者來(lái)說(shuō)也許意義更深遠(yuǎn))。提升其在該領(lǐng)域競(jìng)爭(zhēng)力的捷徑也許就是Zend Engine 2.0設(shè)計(jì)藍(lán)圖中呈現(xiàn)的內(nèi)容--為這個(gè)面向過(guò)程的相對(duì)傳統(tǒng)的語(yǔ)言添加全新的面向?qū)ο竽P,使得開(kāi)發(fā)者能夠容易的采用面向?qū)ο缶幊谭椒ā?br>
不過(guò)非常遺憾的是,試圖進(jìn)入企業(yè)級(jí)計(jì)算領(lǐng)域的PHP欠缺的還太多--沒(méi)有足夠的商業(yè)支持,大量的擴(kuò)展模塊處于試驗(yàn)階段而其中的一些需要被用來(lái)在企業(yè)級(jí)應(yīng)用中擔(dān)當(dāng)重任,對(duì)于系統(tǒng)架構(gòu)的規(guī)劃和支持不力等等,還有也許是最重要的是商業(yè)界的觀念能否接受開(kāi)源而不是商業(yè)支持的編程語(yǔ)言構(gòu)建整個(gè)商業(yè)系統(tǒng)(不過(guò)Linux的應(yīng)用似乎正在展示美好的前景,但僅僅是前景而已)。即使是樂(lè)觀的PHP支持者(比如我自己),對(duì)于在企業(yè)級(jí)計(jì)算中使用PHP,還是持懷疑態(tài)度--即使是Zend Engine 2.0如設(shè)計(jì)藍(lán)圖所述的被推出之后。

因此,我對(duì)采用Zend Engine 2.0的新版PHP并不抱有太大的希望:

它的適用處還是在于快速web編程環(huán)境,比如互聯(lián)網(wǎng)站等;選擇PHP作為構(gòu)建關(guān)鍵商業(yè)系統(tǒng)的主要支持語(yǔ)言,需要非常非常慎重。
雖然Zend Engine 2.0著重加強(qiáng)了面向?qū)ο筇匦裕ㄒ苍SPHP的創(chuàng)造維護(hù)者們也會(huì)大力提倡使用它們),但是對(duì)于現(xiàn)有的大部分PHP開(kāi)發(fā)者而言,用現(xiàn)在的面向過(guò)程的風(fēng)格書寫PHP程序并不會(huì)受到任何影響(Zend Engine 2.0也非常周到的考慮到了向下兼容的問(wèn)題)--也就是說(shuō),表面上看PHP會(huì)由于被賦予了面向?qū)ο蟮奶卣鞫訌?qiáng)大,實(shí)際上在大多數(shù)開(kāi)發(fā)者手中采用Zend Engine 2.0和1.0版本(支持現(xiàn)在的PHP 4的解釋引擎)的PHP并沒(méi)有什么區(qū)別。

當(dāng)然還是有一些值得期待的地方:

快速web編程環(huán)境同樣需要良好的建模,面向?qū)ο蟮脑O(shè)計(jì)和實(shí)現(xiàn)要比面向過(guò)程的或者說(shuō)是面向頁(yè)面間的方法好得多。部分PHP開(kāi)發(fā)者(包括PHP的創(chuàng)造維護(hù)者們)已經(jīng)在大力提倡使用語(yǔ)言本身的面向?qū)ο筇匦裕≒EAR就是很好的例子),Zend Engine 2.0將會(huì)為他們帶來(lái)福音--更好的面向?qū)ο竽P停梢詭缀醪皇芟拗频牟捎妹嫦驅(qū)ο笤O(shè)計(jì)和實(shí)現(xiàn)(而現(xiàn)在的PHP由于面向?qū)ο笾С值臉O不完全,根本作不到這一點(diǎn));同時(shí)在對(duì)象的使用性能上能夠得到一定提升。
違例處理機(jī)制的引入對(duì)于PHP項(xiàng)目會(huì)帶來(lái)一定積極的影響,可以有效的提高代碼效率,并鼓勵(lì)妥善的處理錯(cuò)誤。
由于Zend Engine 2.0面向?qū)ο竽P偷母倪M(jìn),使得PHP調(diào)用外部組件(比如COM和Java Bean)更加方便以及合理,在效率上也將得到提高。這一改進(jìn)也許會(huì)增加PHP作為異種系統(tǒng)(比如采用Java開(kāi)發(fā)的系統(tǒng))前端的可能性(國(guó)內(nèi)的minij2ee項(xiàng)目就是這方面的一個(gè)典型)。

對(duì)PHP開(kāi)發(fā)者的一些建議
首先你不需要對(duì)未來(lái)的PHP有任何的擔(dān)憂--你所擁有的開(kāi)發(fā)技能在新的版本中仍然適用而且運(yùn)作得很好(這讓我想起Microsoft .net中Visual Basic的尷尬地位--PHP不會(huì)這樣)。即使你對(duì)面向?qū)ο笠粺o(wú)所知,也可以按照傳統(tǒng)的方式(也是大部分市面上講授PHP開(kāi)發(fā)的書籍中介紹的技術(shù))進(jìn)行開(kāi)發(fā)。

其次是如果你對(duì)PHP的面向?qū)ο筇匦援a(chǎn)生了興趣,或者已經(jīng)有了積極的探索,那么未來(lái)的PHP會(huì)更加適合你的口味--你可以完全采用面向?qū)ο蠓椒ㄟM(jìn)行項(xiàng)目的分析,然后用PHP輕松的實(shí)現(xiàn)你的設(shè)計(jì)。也許隨之而來(lái)的還會(huì)有一些適用于PHP的建模工具(也許是在現(xiàn)有工具上的增加特性,也許是開(kāi)發(fā)源碼社區(qū)的又一貢獻(xiàn))更加有利于PHP的面向?qū)ο笤O(shè)計(jì)和編碼。不過(guò)對(duì)于這一類開(kāi)發(fā)者,需要注意的關(guān)鍵在于--你不是僅僅被局限于PHP的世界中,適合你需要的也許是更加面向?qū)ο蟮腃++或Java;也許PHP對(duì)于你是最熟悉的,但是C++或Java卻是更強(qiáng)大的。

再次是對(duì)于那些"漸有去意"的PHP開(kāi)發(fā)者(我指的是在PHP無(wú)用論調(diào)下受到影響準(zhǔn)備放棄PHP的開(kāi)發(fā)者),大部分指責(zé)PHP的論點(diǎn)都集中在是否具有更大的擴(kuò)展即是否適合企業(yè)級(jí)系統(tǒng)構(gòu)建上--如果你也是為此放棄了PHP,那么就上文的觀點(diǎn),未來(lái)的PHP也很少可能成為能夠挑戰(zhàn)Microsoft以及Sun產(chǎn)品的編程語(yǔ)言--從這個(gè)意義上來(lái)說(shuō)你的選擇也許是正確的。

最后對(duì)于正準(zhǔn)備接觸PHP的開(kāi)發(fā)者,不管是現(xiàn)有的PHP還是未來(lái)的PHP都至少是非常適合web快速開(kāi)發(fā)的編程語(yǔ)言--不過(guò)同樣原因,如果你在尋找"重量級(jí)"的可以支持完整商業(yè)系統(tǒng)的編程語(yǔ)言,請(qǐng)慎重考慮PHP,即使未來(lái)的版本會(huì)極大的加強(qiáng)面向?qū)ο筮@一流行的特性。