論Web 2.0時(shí)代的PHP 隨著(zhù)所謂WEB2.0時(shí)代來(lái)臨,程序員從來(lái)沒(méi)有時(shí)代象今天那樣受人注意,很多程序員對于語(yǔ)言的爭論也從來(lái)沒(méi)有象今天這樣劇烈,JAVA、C++、PHP、ASP等等,最近又出來(lái)一個(gè)Ruby,加上Python。無(wú)數的FANS在中間進(jìn)行爭論不休,也就是在網(wǎng)路上,如果是在現實(shí)生活中,大概會(huì )象《倚天屠龍記》里描述的那樣,會(huì )決戰光明頂來(lái)定一個(gè)勝負,或者說(shuō)定出天下第一大門(mén)派。而現在定出誰(shuí)是天下第一大其實(shí)很方便,看一下哪個(gè)語(yǔ)言旗下的弟子人數即可。而現在最流行的統計方式,就是Google了,看看Google的搜索結果,基本就能判斷出其在市面上的網(wǎng)站的使用情況:
約有5,760,000,000項符合 php 的查詢(xún)結果
約有3,070,000,000項符合asp的查詢(xún)結果
約有976,000,000項符合java的查詢(xún)結果
約有327,000,000項符合perl的查詢(xún)結果
約有238,000,000項符合python的查詢(xún)結果
約有225,000,000項符合c++的查詢(xún)結果
約有176,000,000項符合ruby的查詢(xún)結果
這段時(shí)間葛優(yōu)的光腦袋頻繁曝光,總是喋喋不休的告訴俺們一個(gè)道理——用的人多的卡就是好卡。而如果套用這個(gè)光頭明星的話(huà),那就是,我,相信群眾,從上面查詢(xún)的結果大家可以看到,人民群眾是很愛(ài)戴PHP的。
但如果你去問(wèn)互聯(lián)網(wǎng)的一些資深開(kāi)發(fā)人員,PHP、ASP與Java,他們之間誰(shuí)更好?一般來(lái)說(shuō),這個(gè)人都會(huì )告訴你,ASP就不用想啦,微軟出的垃圾,PHP和Java是不錯的選擇,Java適合做大項目,PHP適合做一些短平快的東西。如果你還繼續問(wèn),這個(gè)高手還沒(méi)有失去耐心的情況下,他大體都會(huì )說(shuō),你看世界上最大的互動(dòng)平臺eBAY,就是用JAVA寫(xiě)的,中國最大的社區CHINAREN校友錄也是JAVA,而很多小的網(wǎng)站,初期都是PHP,后來(lái)各種原因都必須改到JAVA上面去。這種感覺(jué)就是像說(shuō),如果你想學(xué)武功以便出去砍人,或者說(shuō)在江湖揚名立萬(wàn),那么行軍拳你就不用練啦,這個(gè)東西是政府拿出來(lái)強身鍵體的,五虎斷門(mén)刀這個(gè)東西你用來(lái)對付一般的流氓是綽綽有余,但是碰到絕頂高手你就歇了。而Java有點(diǎn)象太極拳,當今武林最大的門(mén)派之一SUN的首推武功,是對負高手的不二選擇,于是很多人就認定:PHP是低等武功,練到最好的結果也就是給賭場(chǎng)看看場(chǎng)子,只有練就Java才能做武林盟主。
俺和很多公司的技術(shù)經(jīng)理聊的時(shí)候,經(jīng)理們說(shuō)很多人都有這種心理,他是使用Java的,而你如果讓他寫(xiě)PHP,,很多人會(huì )有一種受到侮辱的感覺(jué),不是覺(jué)得經(jīng)理不重視他,就是在想自己什么時(shí)候得罪了經(jīng)理,竟然被發(fā)配到PHP這種偏遠的小地方去了。越是大公司,PHP的項目越難開(kāi)展起來(lái),這個(gè)讓很多技術(shù)老大們很是郁悶,但也很是奇怪。所以,下面,咱們一起分析一下形成這種被人民群眾認可,卻不被很多開(kāi)發(fā)人員看好的語(yǔ)言——PHP。
PHP 進(jìn)入中國是98,99年,進(jìn)入的時(shí)候,初期應用的典型是Chinaren校友錄,還有很多的互動(dòng)應用,它以開(kāi)發(fā)方便,容錯性好,迅速成為很多網(wǎng)站的選擇。到了00,01年,互聯(lián)網(wǎng)泡沫的時(shí)候,很多都是PHP完成對網(wǎng)站的開(kāi)發(fā),它的流行有以下幾個(gè)原因:
兼容C的語(yǔ)法,容易掌握
就這一點(diǎn)來(lái)說(shuō),它保證了開(kāi)發(fā)人員的穩定來(lái)源,基本上說(shuō),每個(gè)學(xué)計算機的人員,沒(méi)有不學(xué)習C 語(yǔ)言的,所以都能在一到兩周左右快掌握這個(gè)新的語(yǔ)言,然后經(jīng)過(guò)簡(jiǎn)單的指導,就能開(kāi)始初期的開(kāi)發(fā)工作。單從程序本身的開(kāi)發(fā)而言,寫(xiě)了三年以上的程序員,和開(kāi)發(fā)了半年以上的PHP程序員差別不是太大。
運行的快速
在網(wǎng)路上面,速度是很重要的問(wèn)題,這一點(diǎn)來(lái)說(shuō)及時(shí)是對PHP非常不屑的人也不得不承認PHP得運行速度還是比較令人滿(mǎn)意的,只不過(guò)由于沒(méi)有很實(shí)際的數據,只是很多人感覺(jué),所以這一點(diǎn)來(lái)說(shuō),沒(méi)有非常有力的證據證明。
非常強的容錯,很好的魯棒性能
很多寫(xiě)PHP的人員應該有這個(gè)感覺(jué),舉個(gè)例子,你申請一個(gè)PHP中的變量,做數字也行,做數組也行,做字符串也可以。我有時(shí)候都在想,這么隨意的風(fēng)格,他是如何保證效率的,只能說(shuō)寫(xiě)這個(gè)語(yǔ)言編譯器的人實(shí)在太不可思議了。
豐富的函數和簡(jiǎn)單的操作
能想到的一些操作,如果不是太罕見(jiàn),你基本都能找到函數庫來(lái)解決,典型的就是讀文件的內容讀到一個(gè)變量,到現在為止,我知道的好像只有PHP提供一個(gè)專(zhuān)門(mén)的函數來(lái)解決這個(gè)問(wèn)題。
以上四個(gè)特點(diǎn),用PHP開(kāi)發(fā)程序非常得普遍,但作為程序來(lái)說(shuō),這些看起來(lái)非常不錯的特征也形成PHP的一些問(wèn)題,造成在很多資深的程序員對其評價(jià)很低。
首先第一條,也是讓很多資深的程序員對其尷尬不已的,做了3年以上的PHP程序員,當一個(gè)初學(xué)者問(wèn)其一些技巧的時(shí)候,他們突然發(fā)現,PHP這種語(yǔ)言實(shí)在是沒(méi)有好說(shuō)的,看它的幫助就能解決問(wèn)題或者看一下教程。不像Java,一個(gè)僅僅寫(xiě)了半年左右的Java開(kāi)發(fā)人員和3年以上的Java開(kāi)發(fā)人員可以說(shuō)有本質(zhì)的區別,后者可以講很多JAVA的開(kāi)發(fā)架構和分布問(wèn)題,講的那個(gè)菜鳥(niǎo)滿(mǎn)腦漿糊,滿(mǎn)臉崇拜。而俺在PHPCHINA.CN講課的時(shí)候,發(fā)現每個(gè)人在聽(tīng)PHP語(yǔ)言一些很細節的東西時(shí)都是昏昏欲睡,大部分都在開(kāi)小差。我想這和PHP語(yǔ)言通俗易懂,沒(méi)有什么挑戰性的概念有很大的關(guān)系。
第二條還是效率的問(wèn)題。市面上對于WEB語(yǔ)言的效率,PHP快只是感覺(jué),并沒(méi)有一個(gè)非常有力的測試證明它比別的語(yǔ)言快很多,而JAVA和ASP卻有一個(gè)非常有名的一個(gè)測試性能比較。
有人做過(guò)試驗,對這三種語(yǔ)言分別做循環(huán)性能測試及存取Oracle數據庫測試。
在循環(huán)性能測試,
JSP用了20000*20000的循環(huán) 共四秒鐘。
而ASP、PHP測試的是2000*2000循環(huán)(少一個(gè)數量級),分別用了63秒。
PHP測試的是2000*2000循環(huán) 84秒
數據庫測試中
三者分別對Oracle8進(jìn)行1000次Insert,Update,Select和Delete:
JSP需要13秒
PHP需要69秒
ASP則需要73秒
一個(gè)有意思的測試,說(shuō)明一個(gè)問(wèn)題,對于大量的運算,PHP看起來(lái)不是一個(gè)太成功的語(yǔ)言,這個(gè)也是很多高手不是很看好PHP的一個(gè)實(shí)際例證明,然而實(shí)際是這個(gè)僅僅是一個(gè)有點(diǎn)BT的測試,誰(shuí)會(huì )在互聯(lián)網(wǎng)上寫(xiě)一個(gè)循環(huán)400萬(wàn)次循環(huán)以上的一次請求應用,我倒很想見(jiàn)識一下。實(shí)際上,在WEB應用中這種循環(huán)或者說(shuō)密集的運算非常罕見(jiàn),如果有,首先該考慮的也是算法的優(yōu)化,減少循環(huán)的次數,然后才是考慮語(yǔ)言本身。并且就算是必要的,也不是Java、PHP和ASP能夠解決的,這個(gè)時(shí)候,如果用的比較多,C會(huì )粉墨登場(chǎng),再多一點(diǎn),可以使用匯編,非常多的情況下,芯片的設計我想是比較好的選擇,怎么樣都不會(huì )輪到Java這種語(yǔ)言,所以用這種方法來(lái)評價(jià)PHP是非常不妥的。
而對于PHP開(kāi)發(fā)中較好的魯棒性,你怎么寫(xiě)它都能運行,并且很穩定,從而也造成PHP程序員的散漫,程序的開(kāi)發(fā)非常隨意,又加上中國互聯(lián)網(wǎng)產(chǎn)品開(kāi)發(fā)的緊急性,幾乎都沒(méi)有很好的文檔,從而后期PHP程序的維護成為無(wú)數項目經(jīng)理的噩夢(mèng)。這一點(diǎn)也是很多高手或者說(shuō)資深程序員對于PHP評價(jià)很低的地方,而當很多項目經(jīng)理需要要規范開(kāi)發(fā)的時(shí)候,卻又發(fā)現無(wú)從規范起,Java有Struts、MVC……而PHP卻缺乏成體系的開(kāi)發(fā)架構,從而也成為PHP很難成為企業(yè)應用系統的選擇。
至于豐富的函數操作,這個(gè)大概是唯一沒(méi)有被人詬病的地方,但是 Java、ASP以及Perl都有很豐富的函數,PHP在這一點(diǎn)沒(méi)有非常大的優(yōu)勢,所以只是成為人們選擇它的一個(gè)不是很重要的理由。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。