明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

是你期待的嗎? 從Zend Engine 2.0的設計藍圖(草稿)看PHP的將來

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

其次是對本文討論焦點的解釋--在這篇評論中我將主要針對將來的PHP中得以大大加強的面向對象特性進行評述。如果你是PHP的開發(fā)者,那么我猜想你應該了解一些PHP語言中的面向對象特性;但是由于一般PHP用于"極端快速開發(fā)環(huán)境"(這是我自己生造出的一個詞語,表示進行一些以客戶為導向的網站開發(fā)的情況,特點就是工期非常短且客戶要求不甚明確),所以真正大量使用其對象特性的開發(fā)者以及開發(fā)項目并不是很多;另外,現(xiàn)有PHP對象模型相對C++和Java的弱勢,也限制了這方面特性的使用。不過在PHP的將來版本中,修改重點就在于語言中的面向對象模型,完善現(xiàn)有版本中許多不良的特性并加入其他特性。因此討論PHP的未來面貌就集中在討論PHP的面向對象特性方面。

好了,讓我們步入正題,看看Zend Engine 2.0的新特性。

歸納Zend Engine 2.0設計藍圖(草稿)
從設計藍圖(草稿)中可以非常清楚的看出下一代Zend Engine是以新的面向對象模型為基礎的。如果你曾經使用過現(xiàn)有PHP 4的面向對象特性,那么也許會在找到一點點Java或者C++的感覺的同時覺得有些別扭--不但是在面向對象語法的匱乏上,而且有時會得到意想不到的運行結果--這一切都是因為在現(xiàn)有的支持PHP 4的Zend Engine 1.0中不那么優(yōu)雅的面向對象模型造成的。

簡單說來,下一代的Zend Engine將向Java靠攏,大量借鑒其面向對象模式。從改進特性的類型來看,應該可以分為三類:第一類是對現(xiàn)有面向對象模型的改進和加強,其中包括對構建器和析構器的定義,增加的私有成員變量、靜態(tài)成員變量、多重繼承、過載等面向對象特性;第二類是對于控制流程的修改和增刪,比如增加了形如try/catch/throw違例處理機制;第三類是關于函數(shù)的修改和增刪,比如對于字符串偏移量的增加函數(shù)。(對于每一類改進的詳細情況,可以查閱參考資料中所列文檔。)由此可以看出,通過第一類和第二類的改進,PHP正在逐步將自己改良成一種具有面向對象特征的語言。

不過問題恰恰就產生于此:

從積極的方面來說,如今的編程世界中更加歡迎具有面向對象特征的語言(即使語言本身并不構建于面向對象基礎之上,也可以通過增加定義的對象等手段使得該語言不至于落在潮流之后)--從這一意義上說,Zend Engine 2.0使得PHP對面向對象的支持將從現(xiàn)在的試探性接觸轉變?yōu)閷淼娜鎿碜o,看來更加符合編程語言發(fā)展的潮流;另外,在構建企業(yè)級應用(這也是PHP現(xiàn)在經常被人指責之處)之時,采用面向對象的方法建模和實現(xiàn)已經是事實上的標準,而PHP的這一改進也許會迎合這一需要,解決語言自身在這方面的薄弱之處。
從消極的方面來說,為開發(fā)者奉獻一個更加類似Java的新版PHP似乎沒有什么意義。PHP被廣泛應用的原因,除了源碼公開和跨平臺等之外,適應互聯(lián)網站構建的簡單、快速的web編程特點恐怕也是重要的一點。極短的學習時間、友好的語言風格(特別是如果你對C比較熟悉)和大量擴充類庫函數(shù),足以證明其強大;但是如果將這樣的語言的下一版本改造成類似面向對象的語言,不但會使原有的大量開發(fā)者在短時間內無所適從,而且非常不利于吸引新的開發(fā)者加入--既然有Java這樣的語言,何必去學習PHP呢?

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

問題的關鍵--我們期望將來的PHP會是什么樣子?
其實問題的關鍵也許在于我們期望的PHP到底會向哪一個方向發(fā)展,或者說PHP會致力于哪一個領域。

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

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

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

究竟如何--不抱太大希望
從Zend Engine 2.0的設計藍圖中看來,PHP的創(chuàng)造維護者們似乎選擇了后一種策略--幾乎重寫解釋引擎的面向對象模型,加強語言的面向對象特性。我個人認為這樣的選擇是有一定的理由的:

PHP在適應快速web編程方面似乎已經做得很好,在現(xiàn)有語言架構基礎上對于此方面已經不可能有太大改變(能夠做的僅僅是修改、增刪一些核心函數(shù)以及按部就班的增加更多的擴展函數(shù)庫),而PHP必須要發(fā)展…… J
大部分人都意識到了PHP的局限性,它的創(chuàng)造維護者們更加清楚--假如PHP能夠在企業(yè)級應用中獲得重視,那將是一次更大的勝利(對于開源軟件的擁護者來說也許意義更深遠)。提升其在該領域競爭力的捷徑也許就是Zend Engine 2.0設計藍圖中呈現(xiàn)的內容--為這個面向過程的相對傳統(tǒng)的語言添加全新的面向對象模型,使得開發(fā)者能夠容易的采用面向對象編程方法。

不過非常遺憾的是,試圖進入企業(yè)級計算領域的PHP欠缺的還太多--沒有足夠的商業(yè)支持,大量的擴展模塊處于試驗階段而其中的一些需要被用來在企業(yè)級應用中擔當重任,對于系統(tǒng)架構的規(guī)劃和支持不力等等,還有也許是最重要的是商業(yè)界的觀念能否接受開源而不是商業(yè)支持的編程語言構建整個商業(yè)系統(tǒng)(不過Linux的應用似乎正在展示美好的前景,但僅僅是前景而已)。即使是樂觀的PHP支持者(比如我自己),對于在企業(yè)級計算中使用PHP,還是持懷疑態(tài)度--即使是Zend Engine 2.0如設計藍圖所述的被推出之后。

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

它的適用處還是在于快速web編程環(huán)境,比如互聯(lián)網站等;選擇PHP作為構建關鍵商業(yè)系統(tǒng)的主要支持語言,需要非常非常慎重。
雖然Zend Engine 2.0著重加強了面向對象特性(也許PHP的創(chuàng)造維護者們也會大力提倡使用它們),但是對于現(xiàn)有的大部分PHP開發(fā)者而言,用現(xiàn)在的面向過程的風格書寫PHP程序并不會受到任何影響(Zend Engine 2.0也非常周到的考慮到了向下兼容的問題)--也就是說,表面上看PHP會由于被賦予了面向對象的特征而更加強大,實際上在大多數(shù)開發(fā)者手中采用Zend Engine 2.0和1.0版本(支持現(xiàn)在的PHP 4的解釋引擎)的PHP并沒有什么區(qū)別。

當然還是有一些值得期待的地方:

快速web編程環(huán)境同樣需要良好的建模,面向對象的設計和實現(xiàn)要比面向過程的或者說是面向頁面間的方法好得多。部分PHP開發(fā)者(包括PHP的創(chuàng)造維護者們)已經在大力提倡使用語言本身的面向對象特性(PEAR就是很好的例子),Zend Engine 2.0將會為他們帶來福音--更好的面向對象模型,可以幾乎不受限制的采用面向對象設計和實現(xiàn)(而現(xiàn)在的PHP由于面向對象支持的極不完全,根本作不到這一點);同時在對象的使用性能上能夠得到一定提升。
違例處理機制的引入對于PHP項目會帶來一定積極的影響,可以有效的提高代碼效率,并鼓勵妥善的處理錯誤。
由于Zend Engine 2.0面向對象模型的改進,使得PHP調用外部組件(比如COM和Java Bean)更加方便以及合理,在效率上也將得到提高。這一改進也許會增加PHP作為異種系統(tǒng)(比如采用Java開發(fā)的系統(tǒng))前端的可能性(國內的minij2ee項目就是這方面的一個典型)。

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

其次是如果你對PHP的面向對象特性產生了興趣,或者已經有了積極的探索,那么未來的PHP會更加適合你的口味--你可以完全采用面向對象方法進行項目的分析,然后用PHP輕松的實現(xiàn)你的設計。也許隨之而來的還會有一些適用于PHP的建模工具(也許是在現(xiàn)有工具上的增加特性,也許是開發(fā)源碼社區(qū)的又一貢獻)更加有利于PHP的面向對象設計和編碼。不過對于這一類開發(fā)者,需要注意的關鍵在于--你不是僅僅被局限于PHP的世界中,適合你需要的也許是更加面向對象的C++或Java;也許PHP對于你是最熟悉的,但是C++或Java卻是更強大的。

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

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