PHP 20歲了:從玩具到巨頭

發表於2015-06-24

當Rasmus Lerdorf釋出“一個用C寫的小型緊湊的CGI可執行程式集合”時, 他沒有想到他的創造會對網路發展產生多大的影響。今年在Miami舉行的SunshinePHP大會上,Lerdorf做了開場演講,他自嘲到,“在1995年的時候,我以為我已經在 Web 上解除了C API的束縛。顯然,事情並非那樣,我們全成了C程式設計師了。”

實際上,當Lerdorf釋出個人主頁工具(Personal Home Page Tools,即 PHP 名字的來源)的1.0版本時,那時的網路還是如此的年輕。直到那年的十一月份HTML 2.0還沒有公佈,而且HTTP/1.0也是次年的五月份才出現。那時,NCSA HTTPd是使用最廣泛的網路伺服器,而網景的Navigator則是最流行的網路瀏覽器,八月份的時候,IE1.0才剛剛出現。換句話說,PHP的開端剛好撞上了瀏覽器戰爭的前夜。

早些時候,我們談論了一大堆關於PHP對網路發展的影響。回到那時候,當說到用於網路應用的伺服器端處理,我們的選擇是有限的。PHP滿足了我們對於一種工具的需求,這就是可以使得我們在網路上做一些動態的事情。它的實用的靈活性只受限於我們的想像力,PHP從那時起便與網路共同成長。現在,PHP佔據了網路語言的超過80%的份額,已經是成熟的指令碼語言,特別適合解決網路問題。她獨一無二的血統講述了一個故事,實用高於理論,解決問題高於純正。

 

把我們鉤住的網路魔力

PHP一開始並不是一門程式語言,從她的設計就很明顯不是 — 或者她本來就缺乏相關特性,正如那些貶低者指出的那樣。最初,她是作為一種API幫助網路開發者能夠接入底層的C語言封裝庫。第一個版本是一組小的CGI可執行程式,提供表單處理功能,可以訪問查詢引數和mSQL資料庫。而且她可以如此容易地處理一個網路應用的資料庫,證明了其在激發我們對於PHP的興趣和PHP後來的支配地位的關鍵作用。

到了第二版 — 即 PHP/FI — 資料庫的支援已經擴充套件到包括PostgreSQL、MySQL、Oracle、Sybase等等。她通過封裝他們的C語言庫來支援各種資料庫,將他們作為PHP庫的一部分。PHP/FI也封裝了GD庫,可以建立並管理GIF影象。她可以作為一個Apache模組執行,或者編譯進FastCGI支援,並且她引入的 PHP 程式語言支援變數、陣列、語言結構和函式。對於那個時候大多數在網路這塊工作的人來說,PHP是我們一直在尋求的那款“膠水”。

當PHP吸納越來越多的程式語言功能,演變為第三版和之後的版本時,她從來沒有失去這種黏合的特性。通過倉庫如PECL(PHP Extension Community Library),PHP可以把各種庫都連在一起,將他們的函式引入到PHP層面。這種將元件結合在一起的能力,成為PHP之美的一個重要方面,使之不會受限於其原始碼上。

 

網路,一個碼農們的社群

PHP在網路發展上的持續影響並不侷限於能用這種語言幹什麼。PHP如何完成工作,誰參與進來 — 這些都是PHP傳奇中很重要的部分。

早在1997年,PHP的使用者群體開始形成。其中最早的是美國中西部PHP使用者組(後來叫做 Chiago PHP),並1997年二月份的時候舉行了第一次聚會。這是一個充滿生氣、飽含激情的開發者社群形成的開端,聚合成一種吸引力 — 在網路上的一個小工具就可以幫助他們解決問題。PHP這種普遍存在的特性使得她成為網路開發一個很自然的選擇。在分享主導的世界裡,她開始盛行,而且低入的門檻對於許多早期的網路開發者來說是十分有吸引力的。

伴隨著社群的成長,為開發者帶來了一堆工具和資源。這一年是2000年,出現了PHP的一個轉折點,它見證了第一次PHP開發者大會,聚集了程式語言的核心開發者,他們在Tel Aviv見面,討論即將到來的4.0版本的釋出。PHP擴充套件和應用倉庫(PEAR)也於2000年發起,它提供了高質量的使用者程式碼包,依據標準和最佳操作。第一屆PHP大會PHP Kongress不久之後在德國舉行。PHPDeveloper.org也隨後上線,直到今天,這都是PHP社群裡最權威的新聞資源。

這個社群的勢頭表明了接下來幾年裡PHP成長的關鍵所在。隨著網路開發產業的爆發,PHP也獲得發展。PHP開始為更多、更大的網站提供動力。越來越多的使用者群在世界各地開花。郵件列表、線上論壇、IRC、大會,以及如php[architect]、德國PHP雜誌、國際PHP雜誌等商業雜誌 — PHP社群的活力在完成網路工作的方式上有極其重要的影響:共同地,開放地,倡導程式碼共享。

然後,在10年前,PHP 5釋出後不久,在網路發展史上一個有趣地事情發生了,它導致了PHP社群如何構建庫和應用的轉變:Ruby on Rails釋出了。

 

框架的異軍突起

用於Ruby程式語言的Ruby on Rails框架在MVC(模型-檢視-控制)架構模型上獲得了不斷增長的焦點與關注。Mojavi PHP框架幾年前已經使用MVC模型了,但是Ruby on Rails的高明之處在於鞏固了MVC。框架引爆了PHP社群,並且框架已經改變了開發者構建PHP應用程式的方式。

許多重要的專案和發展已經發端,這歸功於PHP社群框架的生長。PHP框架互用性組織成立於2009年,致力於在框架間建立編碼標準,命名約定與最佳操作。編纂這些標準和操作幫助為開發者在使用成員專案的程式碼時提供了越來越多的互用性軟體。互用性意味著每個框架可以拆分為組塊和獨立的庫,也可以作為整體的框架在一起使用。互用性帶來了另一個重要的里程碑:Composer專案於2011年誕生了。

從Node.js的NPM和Ruby的Bundler獲得靈感,Composer開闢了PHP應用開發的新紀元,創造了一次PHP“文藝復興”。它激發了包互用性、標準命名約定、編碼標準的採用、覆蓋測試的提升。它是任何現代PHP應用中的一個基本工具。

 

加速和創新的需要

如今,PHP社群有一個生機勃勃應用和庫的生態系統,有一些被廣泛安裝的PHP應用包括WordPress,Drupal,Joomla和MediaWiki。從小型的夫妻店站點到whitehouse.gov和Wikipeida,這些應用支撐了各種不同規模的業務的網站。在Alexa前十的站點中,有6個使用PHP,在一天內為數十億的頁面訪問提供服務。因此,PHP應用已成為需要加速的首選,並且許多創新也加入到PHP的核心來提升效能。

在2010年,Facebook公開了其用作PHP源對源的編譯器的HipHop,可以翻譯PHP程式碼為C++程式碼,並且編譯為一個單獨的可執行二進位制應用。Facebook的規模和成長需要從標準互用的PHP程式碼遷移到更快、最佳的可執行的程式碼。儘管如此,由於PHP的易用和快速開發週期,Facebook還想繼續使用PHP。HipHop後來進化為HHVM,這是一個針對PHP的JIT(just-in-time)編譯基礎的執行引擎,其包含一個基於PHP的新的語言:Hack。

Facebook的創新以及其他的VM專案是在引擎水平上的比較,其引起了關於Zend引擎未來的討論。Zend引擎依然是PHP的核心和語言規範。在2014年,它建立了一個語言規範專案,“提供一個完整的,簡明的語句定義,和PHP語言的語義學”,使得對編譯器專案來說,建立互用的PHP實現成為可能。

下一個PHP的主要版本成為了激烈爭論的話題,他們提出了一個叫做phpng(下一代)的專案,來清理,重構,優化和改進PHP程式碼基礎,這也展示了對實際應用的效能的實質提升。由於之前有一個未釋出的PHP 6.0版本,因此在決定命名下一個主要版本叫做“PHP 7”後,就合併了phpng分支,並制定了開發PHP 7的計劃,以增加很多語言中擁有的功能,如scalar和返回型別提示。

隨著今天第一版PHP 7 alpha釋出,基準檢測程式顯示她在許多方面與HHVM的一樣好或者擁有更好的效能,PHP正與現代網路開發需求保持一致的步伐。同樣地,PHP-FIG繼續創新和推動框架與庫的協作 — 最近由於PSR-7的採納,這將會改變PHP專案處理HTTP的方式。使用者組、會議、公眾和如PHPMentoring.org這樣的佈道者繼續在PHP開發者社群提倡最好的操作、編碼標準和測試。

PHP從各個方面見證了網路的成熟,而且PHP自己也成熟了。曾經一個簡單的低階C語言庫的API封裝,PHP以她自己的方式,已經成為一個羽翼豐滿的程式語言。她的開發者社群是一個充滿生氣、樂於助人、在實用方面引以為傲,並且歡迎新人的地方。PHP已經經受了20年的考驗,而且目前在語言與社群裡的活躍性,會保證她在接下來的幾年裡將會是一個密切相關的、積極有用的的語言。

在Rasmus Lerdorf的SunshinePHP的演講中,他回憶到,“我會想到我會在20年之後討論當初做的這個愚蠢的小專案嗎?沒有。”

這裡向Lerdorf和PHP社群的其他人致敬,感謝他們把這個“愚蠢的小專案”變成了一個如今網路上持久、強大的元件。

相關文章