為什麼說PHP是個集中營
有一天我跟在DUMBO的一個非常棒的創業公司的老闆聊天,談到為什麼非PHP界的開發人員普遍輕視PHP和PHP相關社區。他提出了一個觀點讓我印象很深,很大程度上是因為以前從來沒有聽到過這樣的說法。
如果你不知道大多數的程式員都會對PHP發什麼樣的牢騷,那麼,這些牢騷差不多會像這樣:
- 文法醜陋
- 缺乏其它語言都有的一些必要的特徵(在5.3版本之前,沒有命名空間,閉包)
- 不一致的函數命名、使用慣例,以及其它一些怪異的東西
- 過程和物件導向的雜混
- 基本上80-90%的PHP項目都爛如一堆狗屎
但他所說的PHP的問題卻是另外一個問題。他並沒有說這種語言有問題――他認為這種語言被一種常見的文化現象包圍著,是一種通常由語言的創造者造就的文化傳統,現在看來這對一些糟糕的編程實踐方法起到了鼓勵作用。也就是它使PHP代碼變的劣質和不可維護。
這種一個語言或架構上體現出創始人的哲學思想並被相關社區推崇的現象是的確存在的。他拿出來Ruby和其創始人Matz作為例子。Matz想要的是一種易讀易寫、能提高程式員工作效率的語言。沒看見Ruby開發人員們言之必稱快速開發以及這種語言的優雅?
接著就是DHH?和他的Rails架構。還有Guido和他的Python語言。於是我在想:Rasmus對於PHP呢?
Rasmus Lerdorf給人的印象非常的有趣。他建立了最初版的PHP語言,而且一直在改進這種語言,他在PHP社區裡被當作神一樣崇拜,他在PHP的任何方面都享有最大的權威。他被眾多的會議邀請去做演講,同時被大網路公司所僱用,他獲得了所有人的尊敬――儘管有這樣一種事實:他成了大多數的非PHP程式員所鄙視的PHP上的眾多問題的形象代表。
Rasmus倡導避免使用架構,而把PHP更多的當作一種範本語言。對他來說,這種做法能產生直接的運行效率和可擴充性(程式負載可知)。而對於其他的所有人來說,這種做法導致了大量的亂燉似的過程式代碼,大量的無法維護的項目。自從1995年PHP誕生至今大概10年左右的時間裡,所有的PHP項目都是按照這種指導寫成的。
與此同時另外一個問題突然的出現了:在PHP5.0之前,PHP的初期,PHP獲得了大量的新手的追隨。這種語言的入門門檻出奇的低,任何人都可以下載自解壓的×AMP Windows程式安裝包、在2兩分鐘內用上這種語言。除此之外,那時在web開發方式上對MVC模式的共識並沒有真正的出現。這樣一來你可以想象,一群新手和一個缺乏好的開發實踐方法的語言群組合到一起能創造出什嗎?一堆無法維護的垃圾。而且整個大環境都是這樣。
不要誤解我的話――優秀的PHP開發人員還是不少的,即使是當時。但是,就像我說的,粗製濫造的菜鳥作品到處都是。當牛仔式無羈的PHP程式員在沒有指導原則的情況下聚集到一起開發程式,於是像PHPbb、 PHPNuke以及很多的粗糙的.php3程式包就出現了。但是你能單純的責怪PHP開發人員嗎?不能!其它的web語言巨人,ASP和Perl,同樣惡名遠揚,同樣宣傳著一種亂燉式的開發方式。
所以這就是為什麼PHP會得到這樣的罵名。是因為它的曆史流傳。大多數已經轉向Python,Ruby和Java的當年的PHP開發人員並沒有在web上MVC概念興起時回頭去重新思考這種語言。此外,更有一些像”Ruby公子“Zed Shaw抱怨一些程式員的思想”受PHP毒害“這樣的露骨的諷刺,像這樣的言論在RubyInside上很盛行。
PHP是個集中營
但像Zend和CodeIgniter這樣的架構的出現把這種語言推向了正確的開發方向上。事實上,它把PHP推向了與Rasmus所希望看到的相反的方向上了。查看一下Zend和CodeIgniter架構,你會發現它們是為數不多的文檔寫的很好,代碼寫的很好的程式。
大多數學習了Ruby開發人員同時都要學習Rails和MVC知識;PHP在此之前已經被使用了整整10年。對於那些新手來說可惡的Ruby沒有給他們這段時間讓他們自由發揮。Rails有現成的標準指導,它的入門門檻相對高很多,通常會把一些缺少經驗的開發人員擋在門外。
事實上,PHP應用程式是可以向其它種語言那樣寫的很好,而且還會具有一定的運行速度上的優勢。PHP世界裡的MVC風格的開發方法興起只是在近幾年才出現的現象。不得不承認,我們應該感謝Rails帶來的這種變化。
那麼,PHP如今是個什麼樣呢?
- 各種標準(非統一,但大多數項目使用MVC,很少有垃圾般的過程式程式)
- 很低的入門門檻
- 速度和可擴充性(在各種指令碼語言裡PHP應該是最好的)
- 有一個好的單元測試架構
- 有最好的各國語言翻譯的文檔
除此之外,互連網上大多數有影響的網站都使用PHP作為它們背景語言或工具,諸如Facebook,Digg,維基百科,Wordpress,Drupal等等。我相信,對PHP有一個深入的掌握會使一個程式員開啟更多的未知領域的大門。
如果你不贊同上面所說的,請留下評論,或email給我――我想聽聽你為什麼不這麼認為。
事實上,我並不是一個PHP迷,我對語言沒有感覺。我使用PHP大多是因為――你猜到了――有人願意付錢給我。所以一切歸咎於此:
如果你希望在軟體設計上做出明智的決定,PHP是你開發web應用程式的最佳選擇。
順便說一下,如果你確信要使用PHP來開發下一個web應用,請試一試CodeIgniter。它是一個輕量級的,普通的,超級快的PHP架構。對於CodeIgniter,我是個粉絲。
?
:)
1 樓 zjshan 2011-05-13
2 樓 lvhjean 2011-05-13
不錯。
我也喜歡CodeIgniter,目前正在學習。
3 樓 Tyler_Long 2011-05-14
php用過symfony這個架構. 可以說這個架構知名度並不比codigniter和zend小. 但是整個過程中我飽受痛苦煎熬. 感覺很混亂,寫出來的代碼過幾天就看不明白了. 兩個月我就折騰了一個小項目, 比一個簡單的部落格程式複雜不了多少.
感覺一個語言的劣勢,光靠架構是難以彌補的. 所以現在非常堅定地追隨python和c#. 二者都非常牛叉優雅,並且幾乎可以用在不同的場合. IronPython和C#可以互相調用! 當我知道這一點的時候, 興奮之情難以言表. 你說,c#和python合璧, 有啥項目做不出來? 還有啥項目是難做的?
所以說啊, php架構的粉絲們,苦海無涯,回頭是岸... 有比php更好的東西,並且多著呢.
4 樓 cherrycmd 2011-05-15
php的項目很難維護
5 樓 smartfish9 2011-05-15
Tyler_Long 寫道
php用過symfony這個架構. 可以說這個架構知名度並不比codigniter和zend小. 但是整個過程中我飽受痛苦煎熬. 感覺很混亂,寫出來的代碼過幾天就看不明白了. 兩個月我就折騰了一個小項目, 比一個簡單的部落格程式複雜不了多少.
感覺一個語言的劣勢,光靠架構是難以彌補的. 所以現在非常堅定地追隨python和c#. 二者都非常牛叉優雅,並且幾乎可以用在不同的場合. IronPython和C#可以互相調用! 當我知道這一點的時候, 興奮之情難以言表. 你說,c#和python合璧, 有啥項目做不出來? 還有啥項目是難做的?
所以說啊, php架構的粉絲們,苦海無涯,回頭是岸... 有比php更好的東西,並且多著呢.
symfony架構很不怎麼樣。現在的架構我感覺還是yii不錯,codeigniter沒用過,但與yii相比,速度挺慢的,zendframework速度更慢,且過度設計了,嚴重不推薦。我熟悉python,以及django,感覺做網站還是php好,當然首先要選一個好架構,並花點時間學會它。
6 樓 xieye 2011-05-17
用zend好多年,zend的特點就是,如果你對其中一個包不滿意,不用就是了。可以只挑選自己愛用的。
7 樓 bardo 2011-06-06
不能完全同意博主的觀點。主要在於對架構的認同。PHP沒有好的架構。Zend,我在本網站已作了批判。至於CodeIgniter,充其量只是一個玩具。它能做的僅不過是一個小的企業網站,並且,安全,可擴充性等存在相當大的問題,包括,在其基礎上重寫的KOHANA也一樣。
PHP目前最大的悲哀就是沒有好的架構。有一些有標準的東西。比如:log4php,那是抄的JAVA的。CAKE,那是抄的ROR的。可悲的是抄的人,根不並不精通PHP。所以,也是垃圾。