PHP的主要語(yǔ)言開(kāi)發(fā)者之一、Zend公司的創(chuàng)始人之一Andi Gutmans最近在blog中直言不諱地批評(píng)了Java語(yǔ)言。他指出,目前Java廠商試圖在JVM上提供動(dòng)態(tài)語(yǔ)言實(shí)現(xiàn)的路子根本不對(duì),Java已經(jīng)輸?shù)袅薟eb開(kāi)發(fā)語(yǔ)言的戰(zhàn)爭(zhēng),PHP是事實(shí)上的標(biāo)準(zhǔn)和勝利者。
Gutmans的這篇文章在技術(shù)界引發(fā)了強(qiáng)烈爭(zhēng)議,很對(duì)人對(duì)此有不同的意見(jiàn),我在這里就闡述一下我對(duì)PHP和Java兩種語(yǔ)言的看法。
首先對(duì)比一下PHP和Java的異同,PHP是一種解釋執(zhí)行的腳本語(yǔ)言,語(yǔ)法和C語(yǔ)言類似,易學(xué)易用,不懂電腦的非專業(yè)人員稍經(jīng)學(xué)習(xí)也能使用PHP.而Java要先編譯成Class文件,然后在Java虛擬機(jī)上執(zhí)行,Java開(kāi)發(fā)需要熟悉Java語(yǔ)法以及一些核心的架構(gòu),從而實(shí)現(xiàn)一種可復(fù)用的、跨平臺(tái)的軟件,Java比PHP要難學(xué)的多。
實(shí)際上,從技術(shù)架構(gòu)來(lái)說(shuō),Java語(yǔ)言相比PHP有明顯的優(yōu)勢(shì),Java使用的是面向?qū)ο蟮南到y(tǒng)設(shè)計(jì)方法,而PHP還是采用面向過(guò)程的開(kāi)發(fā)方法。PHP只能實(shí)現(xiàn)簡(jiǎn)單的分布式兩層或三層的架構(gòu),而JAVA可以實(shí)現(xiàn)多層架構(gòu)。數(shù)據(jù)庫(kù)層(持久化層)、應(yīng)用(業(yè)務(wù))邏輯層、表示邏輯層彼此分開(kāi),而且現(xiàn)在不同的層都已經(jīng)有一些成熟的開(kāi)發(fā)框架的支持。例如Struts就是利用Java的web開(kāi)發(fā)技術(shù)實(shí)現(xiàn)了MVC的設(shè)計(jì)模式,而在業(yè)務(wù)邏輯層也有Spring框架,數(shù)據(jù)庫(kù)持久化層有Hibernate等框架。這些框架可以方便開(kāi)發(fā)者高效、合理、科學(xué)得架構(gòu)多層的商業(yè)應(yīng)用。從數(shù)學(xué)運(yùn)算和數(shù)據(jù)庫(kù)訪問(wèn)速度來(lái)講,Java的性能也優(yōu)于PHP.實(shí)際上,對(duì)于跨平臺(tái)的大型的企業(yè)應(yīng)用系統(tǒng)來(lái)講,Java幾乎已經(jīng)成為唯一的選擇(微軟.NET不支持跨平臺(tái)),但是在于Web網(wǎng)站應(yīng)用開(kāi)發(fā)來(lái)講,Java卻面臨著被PHP邊緣化的危險(xiǎn),幾乎所有的虛擬主機(jī)都支持PHP+MySQL,而支持Java的卻少之又少,在資源上,網(wǎng)上有不計(jì)其數(shù)的PHP資源,很多著名的大型網(wǎng)站(例如Facebook、Mediawiki等)都是基于PHP的,而成功的Java網(wǎng)站卻寥寥無(wú)幾,這又是什么原因呢?
Java的理念是“一次編寫(xiě),到處運(yùn)行”,Java在應(yīng)用框架底下的架構(gòu)是無(wú)與倫比的,遠(yuǎn)勝過(guò)其他任何語(yǔ)言,Java的框架利于大型的協(xié)同編程開(kāi)發(fā),系統(tǒng)易維護(hù)、可復(fù)用性較好。而PHP很容易自學(xué),讓熱備能快速簡(jiǎn)潔地編寫(xiě)代碼,適合于快速開(kāi)發(fā),中小型應(yīng)用系統(tǒng),開(kāi)發(fā)成本低。在調(diào)試、發(fā)布上,PHP也較Java簡(jiǎn)單。
理念上的不同導(dǎo)致了Java和PHP在Web應(yīng)用開(kāi)發(fā)上顯示了不同的結(jié)果,盡管Java的數(shù)學(xué)計(jì)算和數(shù)據(jù)庫(kù)訪問(wèn)都有優(yōu)勢(shì),架構(gòu)也相當(dāng)完美,但是PHP卻可以簡(jiǎn)單輕松地支持高強(qiáng)度Web訪問(wèn),能夠快速開(kāi)發(fā)應(yīng)用,支持PHP的虛擬主機(jī)多如牛毛,使得用PHP開(kāi)發(fā)一個(gè)網(wǎng)站比用Java開(kāi)發(fā)一個(gè)網(wǎng)站要快得多,容易的多。Java所擁有的優(yōu)點(diǎn)只適合傳統(tǒng)的以軟件項(xiàng)目為核心的開(kāi)發(fā)模式,而PHP更適合于以客戶為核心的SaaS的開(kāi)發(fā)模式,因此,PHP目前在Web網(wǎng)站開(kāi)發(fā)的優(yōu)勢(shì)完全是因?yàn)閃eb網(wǎng)站開(kāi)發(fā)的特殊性而導(dǎo)致的,并非編程語(yǔ)言特性所決定。
因此,PHP在Web網(wǎng)站開(kāi)發(fā)語(yǔ)言的戰(zhàn)爭(zhēng)中已經(jīng)慢慢將Java拋在了后面,Java要想在Web網(wǎng)站開(kāi)發(fā)上奮起直追,的確應(yīng)該多聽(tīng)聽(tīng)Andi Gutmans的意見(jiàn),徹底改變一下思路才行,否則兩者的差距只能是越來(lái)越遠(yuǎn)。
另外,雖然在國(guó)際上LAMP(Linux+Apache+Mysql+Php)架構(gòu)已經(jīng)占領(lǐng)了統(tǒng)治地位,但是在中國(guó)國(guó)內(nèi)還有一個(gè)怪胎,就是基于微軟的Windows Server+IIS+SqlServer+ASP/ASP.NET的架構(gòu),從理論上說(shuō),微軟的這一套架構(gòu)也能實(shí)現(xiàn)不錯(cuò)的性能,只可惜Windows和SqlServer價(jià)格不菲,整個(gè)架構(gòu)在性能上比起LAMP不僅沒(méi)有什么優(yōu)勢(shì),反而還有不少劣勢(shì),因此微軟的這一套家伙在國(guó)際市場(chǎng)上吃不開(kāi)。而國(guó)內(nèi)使用微軟盜版則可以忽略成本,而ASP的易學(xué)易用性不遜于PHP,甚至連IT外行都能夠使用,因此在國(guó)內(nèi)也有不小的市場(chǎng)。但是隨著中國(guó)在保護(hù)知識(shí)產(chǎn)權(quán)方面的日趨完善,免費(fèi)的LAMP依舊是未來(lái)的趨勢(shì)。
<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>