php4:奇蹟背後
1995年時,Rasmus在用PHP寫他的個人首頁;今天,PHP成為風靡全球的指令碼語言,越來越多的網站選擇使用PHP,連Yahoo都放棄了自己的指令碼而改用PHP支援它的網站。可以說,PHP是一個奇蹟。我一直認為,任何奇蹟背後都有它的原因。現在,就讓我們透過這個奇蹟,來看看PHP的成功之道。
1 簡單易用
PHP的入門門檻很低,它對使用者的要求微乎其微。學過C語言的人,使用PHP幾乎不需要什麼時間。它們的文法是如此相似,以至於我常常想,是不是在C語言變數前加個$就能改成PHP。這使得大量C程式員在網路指令碼中選擇了PHP。另外,比起asp的組件系統和java龐大的類庫來,PHP的函數庫要好學多了。在編程風格上,PHP更是自由,你可以使用N種風格來寫你的指令碼程式。這些特性使得PHP成為初學者的慣用語言。搶佔初學者市場是很重要的策略。如同任何人都會對自己的初戀記憶猶新一樣,人們往往會對最初學習的語言有很深的感情。即使後來自己成長了,改用其他語言了,還是會時時記起最初學習的語言。在這點上,PHP做得很出色。
2 剪裁得當
PHP開發組是最瞭解網路的一群人,他們非常清楚使用者要的是什麼。PHP就是要做一個出色的網路指令碼語言,而且,它只是要做一個網路指令碼語言。PHP提供的函數集在網路方面相當強大,而且重點均專註於網路應用。像PHP中的無組件檔案上傳,超多資料庫支援等特性都表現出這個特點。順便說一句,PHP甚至支援access資料庫。專註使得PHP在網路上表現出極其優秀的效能。有失才能有得。
3 支援強大
PHP有強大的OpenSource團體支援,在網路上有數以萬計的開原始碼。你可以整合幾個現有程式來實現你的應用,也可以分析大師級的代碼來得到提高。PHP還有很多擴充性的項目來增強PHP在某個方面的功能。像注重編程正常化和代碼重用的PEAR,提供可編譯模板技術的Smarty,甚至開發傳統型程式的GTK。
分析完這幾個理由,我們可以看出,PHP的成功得益於PHP開發組的戰略眼光。PHP提供了一個最小工作集,使使用者能用最簡單的方式高效地完成自己需要的應用。這正是初學者需要的。然後它通過方便的擴充來提供各個方面的解決方案,這樣,你只需要學你要用到的那個領域的東西。當你涉及的領域越來越多時,你的水平也隨之提高,當你熟悉了大多領域時,回頭看看,會發現不知不覺已到山腰。PHP也提供了我們一種學習態度。
asp.net+J2EE:風雨欲來
網路指令碼界的革新浪潮由Microsoft的ASP.net首先發起。在ASP.net中,有一個很迷人的東西——事件驅動機制。這在案頭編程中是很普通的概念,而在指令碼編程中事件驅動意味著對伺服器端的指令碼(如PHP、jsp、ASP)和用戶端的指令碼(如JavaScript和VbScript)進行封裝,使之協同工作。這樣一來,編程就會變得異常方便。在.net環境中的事件驅動還有一個優勢,就是你甚至可以不會任何伺服器端指令碼和用戶端指令碼,因為在ASP.net中,是可以直接使用C#這樣的語言的——連$都不用加。這為MS陣營的傳統程式員轉向網路開發鋪平了道路,同時,也使PHP在初學者市場上受到很大的打擊。可以預見,以後的傳統程式員轉向PHP的將大為減少。不過ASP.net最大的問題在於它只能在Windows上運行,而現在大陸正在大力發展linux。這使得PHP的生存空間似乎寬了點,但是——讓我們來看看Java吧。
Java也是一個奇蹟,1995年發布第一個版本,現在形成三個版本,分別覆蓋嵌入式系統(J2me)傳統型程式(J2se)和伺服器(J2ee)三大應用領域。更重要的是,Java得到了絕大多數程式員的認可,現在世界上最出色的電腦書籍多是以C++或者Java作為描述語言的。Java幾乎像C一樣,成為一種信仰。所以,我們不要妄想Java陣營的程式員會轉向PHP。同時,在同是開源和跨平台的Java面前,PHP丟掉了不少優勢。J2ee中的JSP又在初學者市場對PHP造成相當的壓力。
在曾經使PHP成功的初學者市場、易用性和開源支援等方面都受到挑戰,而隨著機器效能的不斷提高,大家對效率的要求漸漸降低的情況下,可以說,PHP要在ASP.net和J2EE的狹縫中生存並壯大,是一件很不容易的事情。
而PHP本身還有不少問題。像低層使用者過多。大量的開發人員處於入門階段,不知道如何提高自己,導致大量開原始碼不規範和低效率,而又會又下一批初學者從這些糟糕的代碼中學習,如此遞迴。另一方面,高階使用者卻因為PHP的物件導向特性不完整等原因而不得不轉向其他語言以開發大型應用。
PHP5:濃濃咖啡味
PHP開發組在今年年中發布了PHP5的BETA1,我們可以從中看見PHP的反擊。首先,PHP4的開發仍然馬不停蹄,而且我們可以肯定,PHP4的開發還將持續很長一段時間。這樣做的目的是鞏固既有使用者,同時在將來的PHP4版本中逐漸融合部分PHP5的新特性,實現PHP4到PHP5的平滑過渡。
再來看PHP5的變化。在PHP5中,我們看到了太多Java的影子。OO體系幾乎是COPY的Java的,這保證了PHP高階使用者不流失,使得他們能方便的使用最新的技術體系來架構自己的應用。另一方面,也為Java程式員使用PHP提供了方便,雖然這樣的情況可能比較少。在完善了OO體系後,PHP具備了真正進入企業級市場的能力。然後PHP5也添加了不少自己的東西,像__get,來使這個體系更易用。不知道的是,這杯cappuccino是否會像Java般受歡迎呢?
從PHP5的改變中,我們看出了PHP將來的方向。一是和JSP競爭,爭取在某一些方面取代JSP,成為粘合JavaBeans和Servlet的膠水。這要求PHP和Java之間建立更為緊密的關係。Zend小組正在參與JSR規範的指定。這個規範將使得你可以在PHP中直接new一個Java對象並調用它的方法。這樣也能使PHP更快的進入企業級市場。另外,如果PHP編寫的指令碼能被直接編譯成Binary Code在Jvm上啟動並執行話,PHP的前景會好很多。另一個方向是做Java和.net間的整合,在一些大型的應用中整合已有資源。PHP4中我們已經可以調用com組件和Java對象,相信在將來PHP5將對此提供更多的支援。
不管怎麼樣,無論是和J2ee和.net競爭還是融合,PHP要走的,將是一條滿是荊棘的路。不過既然PHP已經一路風雨地走到了今天,我們有什麼理由不相信它能走得更遠呢?
Best Wishes, PHP.
PS 這隻是Easy對PHP將來發展的一點個人看法,可能不是很成熟,只是給大家一點參考。