Java開發經驗:8年+。
PHP開發經驗:<3個月。
想做一個網站,因為有多年的Java經驗,所以一開始自然是想用 Struts+ibatis,雖說 Java Web 開發配置挺繁瑣的,但有多年的積累,自然也不是大問題。
在籌備的過程中,逐漸發現,我要做的網站,最好是基於一個成熟的CMS或者WIKI系統做定製,否則白手起家工作量太大,可是,經過對比選型,我發現在這方面的開源領域,Java陣營毫無抵抗的輸給了PHP陣營。
痛苦啊,抉擇啊,我想選PHP吧,Drupal 或者 Joomla,但又擔心從頭搞定PHP耗時太長,於是希望能夠混搭使用,也就是偏重前台展示的部分,使用PHP在Drupal上定製,而偏重後台商務邏輯的,使用Java開發,兩者之間用 Web Service 互連。
但是,這種混搭風也有問題,那就是開發的複雜度高,從環境搭建到測試,都麻煩,而且Java很耗資源,對虛擬機器主機的要求高,所以,最終在這個項目上放棄了使用Jaa的念頭(至少是暫時的),完全轉向了PHP。
用PHP寫代碼的過程中有些感悟,總結如下:
上手複雜度:PHP勝
我用 Java 做了 2-3 年的 Swing 開發,然後轉向WEB,第一個接觸的架構是 Struts,當時的感受就是要配置的東西太多了,前後鼓搗了三個多月,才感覺漸入佳境了。
如今PHP從開始瞭解到現在總共三個月左右的時間(而且只是業餘時間),其中有一周的時間在看PHP官網的文檔,瞭解主要的語言特性,後面基本上就是邊看邊改代碼,並照貓畫虎的寫東西。雖說當年對軟體開發的理解不能和今天相提並論,但客觀的說
,PHP的確簡單、易學,而且特別適合做WEB開發。
開發感受:各有勝場
PHP最讓我不爽的地方:
經常是出錯後螢幕一片空白(White Screen Of Death,都有專有名詞了,可見這是PHP出錯表現的一大特性),什麼資訊都沒有。
開發工具的auto complete能力遠不如java。
PHP比較爽的地方:
php中,數組和雜湊表等價,而且是使用最廣泛的資料結構,變長參數+數組做參數,能大大提高寫代碼的靈活性。
基本上不用為NPE擔心。
訪問資料庫比JDBC簡單多了,不用什麼持久化架構也能很快的寫出類似DAO的代碼。
許多專為WEB設計的特性,使得從頁面擷取資訊,或者向頁面輸出資訊都變得非常輕巧。
談不上爽或者不爽的特性:
echo 的內容直接到前台頁面上了,一開始我以為echo和java的System.out一樣,會寫到日誌。
由於不像Java那樣對classpath以及class的路徑有著嚴格的要求,一時之間還不習慣,原來建立一個Java類放在什麼地方基本上沒什麼可考慮的,但現在經常要決策一個檔案該放在哪個目錄下。
因為可以OOP,也可以不OOP,所以,增加新功能點的時候,經常很糾結O還是不O。
代碼風格啊!太習慣了getData這樣的命名,是在不適應get_data這樣的函數,因此,執著著,沒有入鄉隨俗的改過來,也好,一眼就可以看出,哪些是屬於架構的,哪些是屬於我的。
平台對比
如果拿PHP和JAVA比,我覺得PHP是瑞士軍刀,而JAVA則是家庭五金維修工具N件套,N >= 100,在解決網站開發這一問題上,PHP的確是小巧、易用,但也有不盡如人意的地方。
比如,我發現J2EE中幾乎必不可少的JDBC串連池,在PHP中約等於無,所以,使用者請求過來,如果需要訪問資料庫,都是現連、現取、現關,究其原因,是架構不同造成的。
實際上,J2EE中有Web Container的概念,使用者請求是由Container分配的線程完成的,線程可以使用進程的記憶體空間互動資料;而PHP是依附於Apache的,每次使用者請求,Apache都啟動一個新的進程來執行PHP指令碼,進程執行完,一切資源都回收了,所以在預設情況下,一個PHP指令碼想要留下點“全域”的東西並不容易(我一開始就被 global 這個關鍵詞給騙了);當然,也不是說不同的請求之間完全沒法交換資料,只是這樣需要使用共用記憶體,或者使用檔案做持久化。
不過,Apache用進程處理請求應該比線程模式要更加健壯,因為在J2EE中,因為一個線程的問題導致整個Container掛掉的情況屢見不鮮。
OOP
PHP主流版本已經對OOP的支援很好,但因為曆史原因,好多PHP的開源項目的代碼都是不那麼OOP的。一開始,我是跟著架構的習慣,用不怎麼OOP的方式寫代碼,在寫了十幾個零散的函數之後,終於忍不住,又全部重構成對象了。
做了這麼多年的Java,OOP的思想已經非常深入,雖然當年從學校出來的時候,也是從結構化程式設計轉向物件導向的,但N年之後,再從物件導向轉向結構化,這種不習慣的感覺更加強烈。也許是OOP真的是更加符合自然的思考習慣吧,現在看著一長串的零散的函數,很有一種不安全的感覺,況且還要挖空心思的為方法起名,以避免衝突,累!
總結
1、應該把PHP納入自己的開發工具箱
2、PHP不夠完美,但可圈可點之處甚多。
3、物件導向為PHP增色不少
4、在開源領域,PHP方面比較發達的是最終應用,所以才有那麼多人使用wordpress建獨立部落格,哪怕沒有開發經驗;而JAVA方面比較發達的是開發架構和類庫,給程式員們使用的。從這個角度來講,Java是個小眾的語言。