當(dāng)Rasmus Lerdorf發(fā)布“一個(gè)用C寫的小型緊湊的CGI可執(zhí)行程序集合”時(shí), 他沒有想到他的創(chuàng)造會(huì)對(duì)網(wǎng)絡(luò)發(fā)展產(chǎn)生多大的影響。今年在Miami舉行的SunshinePHP大會(huì)上,Lerdorf做了開場(chǎng)演講,他自嘲到,“在1995年的時(shí)候,我以為我已經(jīng)在 Web 上解除了C API的束縛。顯然,事情并非那樣,我們?nèi)闪薈程序員了!
實(shí)際上,當(dāng)Lerdorf發(fā)布個(gè)人主頁工具(Personal Home Page Tools,即 PHP 名字的來源)的1.0版本時(shí),那時(shí)的網(wǎng)絡(luò)還是如此的年輕。直到那年的十一月份HTML 2.0還沒有公布,而且HTTP/1.0也是次年的五月份才出現(xiàn)。那時(shí),NCSA HTTPd是使用最廣泛的網(wǎng)絡(luò)服務(wù)器,而網(wǎng)景的Navigator則是最流行的網(wǎng)絡(luò)瀏覽器,八月份的時(shí)候,IE1.0才剛剛出現(xiàn)。換句話說,PHP的開端剛好撞上了瀏覽器戰(zhàn)爭(zhēng)的前夜。
早些時(shí)候,我們談?wù)摿艘淮蠖殃P(guān)于PHP對(duì)網(wǎng)絡(luò)發(fā)展的影響;氐侥菚r(shí)候,當(dāng)說到用于網(wǎng)絡(luò)應(yīng)用的服務(wù)器端處理,我們的選擇是有限的。PHP滿足了我們對(duì)于一種工具的需求,這就是可以使得我們?cè)诰W(wǎng)絡(luò)上做一些動(dòng)態(tài)的事情。它的實(shí)用的靈活性只受限于我們的想像力,PHP從那時(shí)起便與網(wǎng)絡(luò)共同成長(zhǎng),F(xiàn)在,PHP占據(jù)了網(wǎng)絡(luò)語言的超過80%的份額,已經(jīng)是成熟的腳本語言,特別適合解決網(wǎng)絡(luò)問題。她獨(dú)一無二的血統(tǒng)講述了一個(gè)故事,實(shí)用高于理論,解決問題高于純正。
把我們鉤住的網(wǎng)絡(luò)魔力
PHP一開始并不是一門編程語言,從她的設(shè)計(jì)就很明顯不是 — 或者她本來就缺乏相關(guān)特性,正如那些貶低者指出的那樣。最初,她是作為一種API幫助網(wǎng)絡(luò)開發(fā)者能夠接入底層的C語言封裝庫。第一個(gè)版本是一組小的CGI可執(zhí)行程序,提供表單處理功能,可以訪問查詢參數(shù)和mSQL數(shù)據(jù)庫。而且她可以如此容易地處理一個(gè)網(wǎng)絡(luò)應(yīng)用的數(shù)據(jù)庫,證明了其在激發(fā)我們對(duì)于PHP的興趣和PHP后來的支配地位的關(guān)鍵作用。
到了第二版 — 即 PHP/FI — 數(shù)據(jù)庫的支持已經(jīng)擴(kuò)展到包括PostgreSQL、MySQL、Oracle、Sybase等等。她通過封裝他們的C語言庫來支持各種數(shù)據(jù)庫,將他們作為PHP庫的一部分。PHP/FI也封裝了GD庫,可以創(chuàng)建并管理GIF圖像。她可以作為一個(gè)Apache模塊運(yùn)行,或者編譯進(jìn)FastCGI支持,并且她引入的 PHP 編程語言支持變量、數(shù)組、語言結(jié)構(gòu)和函數(shù)。對(duì)于那個(gè)時(shí)候大多數(shù)在網(wǎng)絡(luò)這塊工作的人來說,PHP是我們一直在尋求的那款“膠水”。
當(dāng)PHP吸納越來越多的編程語言功能,演變?yōu)榈谌婧椭蟮陌姹緯r(shí),她從來沒有失去這種黏合的特性。通過倉庫如PECL(PHP Extension Community Library),PHP可以把各種庫都連在一起,將他們的函數(shù)引入到PHP層面。這種將組件結(jié)合在一起的能力,成為PHP之美的一個(gè)重要方面,使之不會(huì)受限于其源代碼上。
網(wǎng)絡(luò),一個(gè)碼農(nóng)們的社區(qū)
PHP在網(wǎng)絡(luò)發(fā)展上的持續(xù)影響并不局限于能用這種語言干什么。PHP如何完成工作,誰參與進(jìn)來 — 這些都是PHP傳奇中很重要的部分。
早在1997年,PHP的用戶群體開始形成。其中最早的是美國中西部PHP用戶組(后來叫做 Chiago PHP),并1997年二月份的時(shí)候舉行了第一次聚會(huì)。這是一個(gè)充滿生氣、飽含激情的開發(fā)者社區(qū)形成的開端,聚合成一種吸引力 — 在網(wǎng)絡(luò)上的一個(gè)小工具就可以幫助他們解決問題。PHP這種普遍存在的特性使得她成為網(wǎng)絡(luò)開發(fā)一個(gè)很自然的選擇。在分享主導(dǎo)的世界里,她開始盛行,而且低入的門檻對(duì)于許多早期的網(wǎng)絡(luò)開發(fā)者來說是十分有吸引力的。
伴隨著社區(qū)的成長(zhǎng),為開發(fā)者帶來了一堆工具和資源。這一年是2000年,出現(xiàn)了PHP的一個(gè)轉(zhuǎn)折點(diǎn),它見證了第一次PHP開發(fā)者大會(huì),聚集了編程語言的核心開發(fā)者,他們?cè)赥el Aviv見面,討論即將到來的4.0版本的發(fā)布。PHP擴(kuò)展和應(yīng)用倉庫(PEAR)也于2000年發(fā)起,它提供了高質(zhì)量的用戶代碼包,依據(jù)標(biāo)準(zhǔn)和最佳操作。第一屆PHP大會(huì)PHP Kongress不久之后在德國舉行。PHPDeveloper.org也隨后上線,直到今天,這都是PHP社區(qū)里最權(quán)威的新聞資源。
這個(gè)社區(qū)的勢(shì)頭表明了接下來幾年里PHP成長(zhǎng)的關(guān)鍵所在。隨著網(wǎng)絡(luò)開發(fā)產(chǎn)業(yè)的爆發(fā),PHP也獲得發(fā)展。PHP開始為更多、更大的網(wǎng)站提供動(dòng)力。越來越多的用戶群在世界各地開花。郵件列表、在線論壇、IRC、大會(huì),以及如php[architect]、德國PHP雜志、國際PHP雜志等商業(yè)雜志 — PHP社區(qū)的活力在完成網(wǎng)絡(luò)工作的方式上有極其重要的影響:共同地,開放地,倡導(dǎo)代碼共享。
然后,在10年前,PHP 5發(fā)布后不久,在網(wǎng)絡(luò)發(fā)展史上一個(gè)有趣地事情發(fā)生了,它導(dǎo)致了PHP社區(qū)如何構(gòu)建庫和應(yīng)用的轉(zhuǎn)變:Ruby on Rails發(fā)布了。
框架的異軍突起
用于Ruby編程語言的Ruby on Rails框架在MVC(模型-視圖-控制)架構(gòu)模型上獲得了不斷增長(zhǎng)的焦點(diǎn)與關(guān)注。Mojavi PHP框架幾年前已經(jīng)使用MVC模型了,但是Ruby on Rails的高明之處在于鞏固了MVC。框架引爆了PHP社區(qū),并且框架已經(jīng)改變了開發(fā)者構(gòu)建PHP應(yīng)用程序的方式。
許多重要的項(xiàng)目和發(fā)展已經(jīng)發(fā)端,這歸功于PHP社區(qū)框架的生長(zhǎng)。PHP框架互用性組織成立于2009年,致力于在框架間建立編碼標(biāo)準(zhǔn),命名約定與最佳操作。編纂這些標(biāo)準(zhǔn)和操作幫助為開發(fā)者在使用成員項(xiàng)目的代碼時(shí)提供了越來越多的互用性軟件。互用性意味著每個(gè)框架可以拆分為組塊和獨(dú)立的庫,也可以作為整體的框架在一起使用;ビ眯詭砹肆硪粋(gè)重要的里程碑:Composer項(xiàng)目于2011年誕生了。
從Node.js的NPM和Ruby的Bundler獲得靈感,Composer開辟了PHP應(yīng)用開發(fā)的新紀(jì)元,創(chuàng)造了一次PHP“文藝復(fù)興”。它激發(fā)了包互用性、標(biāo)準(zhǔn)命名約定、編碼標(biāo)準(zhǔn)的采用、覆蓋測(cè)試的提升。它是任何現(xiàn)代PHP應(yīng)用中的一個(gè)基本工具。
加速和創(chuàng)新的需要
如今,PHP社區(qū)有一個(gè)生機(jī)勃勃應(yīng)用和庫的生態(tài)系統(tǒng),有一些被廣泛安裝的PHP應(yīng)用包括WordPress,Drupal,Joomla和MediaWiki。從小型的夫妻店站點(diǎn)到whitehouse.gov和Wikipeida,這些應(yīng)用支撐了各種不同規(guī)模的業(yè)務(wù)的網(wǎng)站。在Alexa前十的站點(diǎn)中,有6個(gè)使用PHP,在一天內(nèi)為數(shù)十億的頁面訪問提供服務(wù)。因此,PHP應(yīng)用已成為需要加速的首選,并且許多創(chuàng)新也加入到PHP的核心來提升性能。
在2010年,F(xiàn)acebook公開了其用作PHP源對(duì)源的編譯器的HipHop,可以翻譯PHP代碼為C++代碼,并且編譯為一個(gè)單獨(dú)的可執(zhí)行二進(jìn)制應(yīng)用。Facebook的規(guī)模和成長(zhǎng)需要從標(biāo)準(zhǔn)互用的PHP代碼遷移到更快、最佳的可執(zhí)行的代碼。盡管如此,由于PHP的易用和快速開發(fā)周期,F(xiàn)acebook還想繼續(xù)使用PHP。HipHop后來進(jìn)化為HHVM,這是一個(gè)針對(duì)PHP的JIT(just-in-time)編譯基礎(chǔ)的執(zhí)行引擎,其包含一個(gè)基于PHP的新的語言:Hack。
Facebook的創(chuàng)新以及其他的VM項(xiàng)目是在引擎水平上的比較,其引起了關(guān)于Zend引擎未來的討論。Zend引擎依然是PHP的內(nèi)核和語言規(guī)范。在2014年,它創(chuàng)建了一個(gè)語言規(guī)范項(xiàng)目,“提供一個(gè)完整的,簡(jiǎn)明的語句定義,和PHP語言的語義學(xué)”,使得對(duì)編譯器項(xiàng)目來說,創(chuàng)建互用的PHP實(shí)現(xiàn)成為可能。
下一個(gè)PHP的主要版本成為了激烈爭(zhēng)論的話題,他們提出了一個(gè)叫做phpng(下一代)的項(xiàng)目,來清理,重構(gòu),優(yōu)化和改進(jìn)PHP代碼基礎(chǔ),這也展示了對(duì)實(shí)際應(yīng)用的性能的實(shí)質(zhì)提升。由于之前有一個(gè)未發(fā)布的PHP 6.0版本,因此在決定命名下一個(gè)主要版本叫做“PHP 7”后,就合并了phpng分支,并制定了開發(fā)PHP 7的計(jì)劃,以增加很多語言中擁有的功能,如scalar和返回類型提示。
隨著今天第一版PHP 7 alpha發(fā)布,基準(zhǔn)檢測(cè)程序顯示她在許多方面與HHVM的一樣好或者擁有更好的性能,PHP正與現(xiàn)代網(wǎng)絡(luò)開發(fā)需求保持一致的步伐。同樣地,PHP-FIG繼續(xù)創(chuàng)新和推動(dòng)框架與庫的協(xié)作 — 最近由于PSR-7的采納,這將會(huì)改變PHP項(xiàng)目處理HTTP的方式。用戶組、會(huì)議、公眾和如PHPMentoring.org這樣的布道者繼續(xù)在PHP開發(fā)者社區(qū)提倡最好的操作、編碼標(biāo)準(zhǔn)和測(cè)試。
PHP從各個(gè)方面見證了網(wǎng)絡(luò)的成熟,而且PHP自己也成熟了。曾經(jīng)一個(gè)簡(jiǎn)單的低級(jí)C語言庫的API封裝,PHP以她自己的方式,已經(jīng)成為一個(gè)羽翼豐滿的編程語言。她的開發(fā)者社區(qū)是一個(gè)充滿生氣、樂于助人、在實(shí)用方面引以為傲,并且歡迎新人的地方。PHP已經(jīng)經(jīng)受了20年的考驗(yàn),而且目前在語言與社區(qū)里的活躍性,會(huì)保證她在接下來的幾年里將會(huì)是一個(gè)密切相關(guān)的、積極有用的的語言。
在Rasmus Lerdorf的SunshinePHP的演講中,他回憶到,“我會(huì)想到我會(huì)在20年之后討論當(dāng)初做的這個(gè)愚蠢的小項(xiàng)目嗎?沒有!
這里向Lerdorf和PHP社區(qū)的其他人致敬,感謝他們把這個(gè)“愚蠢的小項(xiàng)目”變成了一個(gè)如今網(wǎng)絡(luò)上持久、強(qiáng)大的組件。