编程大师论道:PHP的魅力和不足何
生活随笔
收集整理的這篇文章主要介紹了
编程大师论道:PHP的魅力和不足何
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編程大師論道:PHP的魅力和不足何在2008-07-01 來自:lizhe1985??[收藏到我的網摘]
在編程領域有不少堪稱經典著作,其中包括《Thinking In C++》和《Thinking In Java》,它們的作者是著名的計算機科學作家Bruce Eckel。近日這個編程大師聯系編程語言Java、Perl和Python,分析了老牌經典編程語言PHP的優缺點,下面讓我們一睹為快。
PHP的魅力所在
提起老牌經典腳本語言PHP,我們不禁會聯想到它的一個令人印象深刻的特點,即上手快,你無需對這個語言進行深入廣泛的了解就可以使用它開始編程。在我們知道的語言中,沒有幾個語言能把這種特點體現的淋漓盡致。與之相對應的另一個極端是Java語言,即使你寫一個簡單的hello world程序也需要掌握不少Java知識,運行一個Web應用同樣不那么簡單。而這一切在PHP中是一件舉手之勞的簡單事情。
在編程能力方面,PHP只是比Perl表現好一點。Perl是一種古老的腳本語言。最初的Web應用大多是用Perl編寫的,Perl很像C語言,使用非常靈活,對于文件操作和處理具有和C語言一樣的方便快捷。
但是,由于Perl的靈活性和“過度”的冗余語法,也因此導致許多Perl程序的代碼令人難以閱讀和維護,記得在Web剛剛興起的時候,當聽到有人說將使用Perl編寫大型應用的時候,我就知道他們面臨的將是失敗。
Perl的哲學思想是同一件事,總有不止一種方法來解決,結果造成了大量難讀難懂的程序。對于規模較大的系統來說,Perl編寫的維護成本相對更高,另外Perl對于CPU的消耗似乎較高,效率似乎有一些不足。
計算機科學作家Bruce Eckel
相比來說,PHP卻已經創建了一些更大型的應用,例如大名鼎鼎的開源CMS系統Drupal。我的一個朋友Nancy Nicolaisen表示她希望搭建一個旅游網站,我建議她看一下Drupal。她聽取了我的建議并最終選擇了它,只進行了輕微的改動就使她的網站上線了,用她的話來說,這個用戶社區吸引她的地方是它的強大和易用。
而且PHP允許初學者可以直接針對他們感興趣的功能進行編程,而無需花費大量的時間來學習編程理論和實踐。你只需要編寫代碼并通過網頁來查看效果就可以了。
PHP的不足之處
但是這同時也是這個語言的問題所在。你經常會發現很多使用PHP編寫出的代碼錯誤百出,但這些代碼往往卻被人們互相拷貝,卻沒有人去認真分析研究它們。這些代碼通常是由那些習慣互相借鑒拷貝代碼的程序員所編寫,這些代碼質量低劣的原因是這些程序員通常不習慣問為什么,不喜歡弄清楚原理,只管拿來就用。
在我第一次想深入了解這個語言的時候,我希望看到一些關于文件鎖定的示例,結果盡管看到了非常多,但卻沒有一個是正確的。正如事實已經證明的那樣,PHP 主要是與數據庫搭配使用,數據庫來處理所有一致性問題,因此多數人只關心從數據庫中存取數據,而不用再去必須考慮底層的問題。但是這個語言不僅僅可以處理與數據庫交互的上層問題,同樣也可以實現與文件系統之間交互的底層問題。我的感覺是,在PHP社區中多數人只關心如何得到一個好的結果,而沒有多少人關心它的真正實現原理,因此才出現了這種錯誤的傾向。
后來推出了PHP 5,與以前版本相比有了不小改進,但是它主要是增加了一些從C++和Java中提取出來的功能,但是人們只是到處找來一些新功能,但卻沒有仔細的分析每一個增加的功能,及其對這個語言的影響。
相比之下,根據我對Python語言多年的觀察,在過去10多年中它增加的每一個新功能都經過反復的分析和推敲。時間將會證明誰對誰錯,或者PHP社區將會知道如何來處理這些功能,但是我對此深表懷疑。
在最近一段時間里,我一直使用PHP來實現我新建立的站點。之所以選擇它的關鍵是,我只用它來進行一些簡單的開發。舉個例子來說,PHP讓你可以解決非常弱智的HTML問題,例如你不能在HTML中包含文件的問題。PHP可以輕松做到這一點,而且可以讓我輕松的在整個站點之間實現我的設計,而且有時候我們只需要實現一些小東西并將其嵌入在頁面中,PHP實現起這些東西來非常簡單。
但是,我發現隨著要完成的任務復雜度的提高,更好的選擇是選擇使用Python,因此PHP更適于處理簡單的任務。
Python的內核非常精簡,功能非常豐富,它提供了一個良好的程序構建基礎。綜合了C和C++二者的優點,只要采用合適的結構和方式,便可對 Python程序進行無限的擴充。當然,它也有自己的不足之處,例如有的朋友抱怨Python對規則表達式的支持不如PHP中強大。
總結
以上是生活随笔為你收集整理的编程大师论道:PHP的魅力和不足何的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery1.3.2 源码学习 -2
- 下一篇: 《网络规划设计师考试大纲》、《网络规划设