PHP的主要語言開發者之一、Zend公司的創始人之一Andi Gutmans最近在blog中直言不諱地批評了Java語言。他指出,目前Java廠商試圖在JVM上提供動態語言實現的路子根本不對,Java已經輸掉了Web開發語言的戰爭,PHP是事實上的標準和勝利者。
Gutmans的這篇文章在技術界引發了強烈爭議,很對人對此有不同的意見,我在這里就闡述一下我對PHP和Java兩種語言的看法。
首先對比一下PHP和Java的異同,PHP是一種解釋執行的腳本語言,語法和C語言類似,易學易用,不懂電腦的非專業人員稍經學習也能使用PHP.而Java要先編譯成Class文件,然后在Java虛擬機上執行,Java開發需要熟悉Java語法以及一些核心的架構,從而實現一種可復用的、跨平臺的軟件,Java比PHP要難學的多。
實際上,從技術架構來說,Java語言相比PHP有明顯的優勢,Java使用的是面向對象的系統設計方法,而PHP還是采用面向過程的開發方法。PHP只能實現簡單的分布式兩層或三層的架構,而JAVA可以實現多層架構。數據庫層(持久化層)、應用(業務)邏輯層、表示邏輯層彼此分開,而且現在不同的層都已經有一些成熟的開發框架的支持。例如Struts就是利用Java的web開發技術實現了MVC的設計模式,而在業務邏輯層也有Spring框架,數據庫持久化層有Hibernate等框架。這些框架可以方便開發者高效、合理、科學得架構多層的商業應用。從數學運算和數據庫訪問速度來講,Java的性能也優于PHP.實際上,對于跨平臺的大型的企業應用系統來講,Java幾乎已經成為唯一的選擇(微軟.NET不支持跨平臺),但是在于Web網站應用開發來講,Java卻面臨著被PHP邊緣化的危險,幾乎所有的虛擬主機都支持PHP+MySQL,而支持Java的卻少之又少,在資源上,網上有不計其數的PHP資源,很多著名的大型網站(例如Facebook、Mediawiki等)都是基于PHP的,而成功的Java網站卻寥寥無幾,這又是什么原因呢?
Java的理念是“一次編寫,到處運行”,Java在應用框架底下的架構是無與倫比的,遠勝過其他任何語言,Java的框架利于大型的協同編程開發,系統易維護、可復用性較好。而PHP很容易自學,讓熱備能快速簡潔地編寫代碼,適合于快速開發,中小型應用系統,開發成本低。在調試、發布上,PHP也較Java簡單。
理念上的不同導致了Java和PHP在Web應用開發上顯示了不同的結果,盡管Java的數學計算和數據庫訪問都有優勢,架構也相當完美,但是PHP卻可以簡單輕松地支持高強度Web訪問,能夠快速開發應用,支持PHP的虛擬主機多如牛毛,使得用PHP開發一個網站比用Java開發一個網站要快得多,容易的多。Java所擁有的優點只適合傳統的以軟件項目為核心的開發模式,而PHP更適合于以客戶為核心的SaaS的開發模式,因此,PHP目前在Web網站開發的優勢完全是因為Web網站開發的特殊性而導致的,并非編程語言特性所決定。
因此,PHP在Web網站開發語言的戰爭中已經慢慢將Java拋在了后面,Java要想在Web網站開發上奮起直追,的確應該多聽聽Andi Gutmans的意見,徹底改變一下思路才行,否則兩者的差距只能是越來越遠。
另外,雖然在國際上LAMP(Linux+Apache+Mysql+Php)架構已經占領了統治地位,但是在中國國內還有一個怪胎,就是基于微軟的Windows Server+IIS+SqlServer+ASP/ASP.NET的架構,從理論上說,微軟的這一套架構也能實現不錯的性能,只可惜Windows和SqlServer價格不菲,整個架構在性能上比起LAMP不僅沒有什么優勢,反而還有不少劣勢,因此微軟的這一套家伙在國際市場上吃不開。而國內使用微軟盜版則可以忽略成本,而ASP的易學易用性不遜于PHP,甚至連IT外行都能夠使用,因此在國內也有不小的市場。但是隨著中國在保護知識產權方面的日趨完善,免費的LAMP依舊是未來的趨勢。
<iframe id="google_ads_frame1" style="LEFT: 0px; POSITION: absolute; TOP: 0px" name="google_ads_frame" marginwidth="0" marginheight="0" src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-1076724771190722&output=html&h=60&slotname=5506163105&w=468&lmt=1292033497&flash=10.1.102.64&url=http%3A%2F%2Fmorris.javaeye.com%2Fblog%2F188327&dt=1292033497218&shv=r20101117&jsv=r20101209&saldr=1&correlator=1292033497296&frm=0&adk=2738616005&ga_vid=236802693.1292033497&ga_sid=1292033497&ga_hid=1861103146&ga_fc=0&u_tz=480&u_his=0&u_java=1&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=32&u_nplug=0&u_nmime=0&biw=994&bih=589&ref=http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3DJAVA%25D3%25EF%25D1%25D4%25BF%25AA%25B7%25A2%25BC%25BC%25CA%25F5%26pn%3D110&fu=0&ifi=1&dtd=657&xpc=aTAMl37CFY&p=http%3A//morris.javaeye.com" frameborder="0" width="468" scrolling="no" height="60" allowTransparency="allowTransparency"></iframe>