機器之心報道
機器之心編輯部
PHP,祝你 25 歲生日快樂。
「隻要是用過 PHP 的程序員,都知道兩件事:第一,這是一種糟糕的語言,如果有其他選擇,自己絕不會再使用 PHP;第二,曆史上一些非常成功的項目都在用 PHP。」
Fine,這兩點并不矛盾。作為一門編程語言,PHP 是有很多的缺陷,但和 PHP 環境具備的優點相比,這些缺陷也就不值一提了。和其他語言相比,PHP 為項目的搭建、更改和運行提供了更好的支持。
2020 年 6 月 8 日,「世界上最好的語言」PHP 迎來了自己的 25 周歲生日。
?phpprint "This is the best language in the world.";?
PHP 走過的 25 年
與其他語言不同,PHP 是在 web 服務器中誕生的。它的優點與面向請求、服務器端執行緊密相關。
故事始于 1995 年。當時,Rasmus Lerdorf 使用 C 語言編寫了一個簡單的通用網關接口 (CGI) 二進制文件集,這是 PHP 的第一個化身。這個集合最初被用于跟蹤 Rasmus Lerdorf 在線簡曆的訪問數量,之後 Rasmus 将腳本套件命名為「Personal Home Page Tools」,簡寫為「PHP Tools」。
25 年說短不短,不過 PHP 的發明者 Rasmus Lerdorf 今年也才 51 歲。
1995 年 6 月 8 日,Rasmus 向公衆發布了 PHP Tools,這也是 PHP 誕生的标志性事件。
1996 年 4 月,Rasmus 重寫了一次代碼,推出了 PHP/FI,開始了 PHP 從工具套件向編程語言的真正演化。它包含對 DBM、mSQL 和 Postgres95 數據庫的内置支持,并支持 Cookie、用戶自定義函數等。1997 年 11 月,PHP/FI 2.0 發布。
1997 年 12 月,以色列理工學院的學生 Andi Gutmans 和 Zeev Suraski 為他們作為大學項目開發的電子商務應用程序尋找後端。他們發現 PHP/FI 2.0 低效且缺少功能,于是開始完全重寫底層解釋器。他們聯系到 Rasmus,與之讨論了實施方案和他們要重新開發的 PHP 的各個方面。
左:Andi Gutmans;右:Zeev Suraski。
1998 年 6 月,PHP 3.0 誕生。Zeev 和 Andi 重寫了解釋器并引入了一個新的擴展 API,該 API 大大簡化了社區貢獻新擴展的方式。頂峰時,PHP 3 安裝在互聯網大約 10% 的 Web 服務器上。
1999 年 1 月,Zeev 與 Andi 成立了 Zend 公司。該公司後來成為 PHP 的創新和開發源。它貢獻了核心改進,以及用戶包與框架和開發環境工具。
Zend 的成立為 PHP 的發展帶來了不小的變化。2000 年 5 月,PHP 4.0 發布。這一新版本帶有 Andi 和 Zeev 開發的全新「Zend 引擎」核心。除了性能得到顯著提升外,PHP 4 還添加了對更多 Web 服務器、HTTP 會話、輸出緩沖和多個新語言結構的支持。
2003 年,PHP 被用于開發博客軟件和内容管理系統 WordPress。這一軟件一經發布即風靡全球,為 PHP 增加了大量人氣。時至今日,互聯網上超過三分之一的網站使用 WordPress。
WordPress:以 PHP 和 MySQL 為平台的自由開源的博客軟件和内容管理系統。
2004 年,PHP 5.0 發布。在此期間,Dmitry 加入 Zend 并在 PHP 5 期間幫助開發了大多數核心 PHP 子系統。同年,Facebook.com 以簡單的服務器渲染 PHP 網站形式上線。
此時,PHP 已經非常流行了,因為它是第一批支持動态網頁的工具之一,而且 WordPress 為該語言添加了一些新功能,但這些也破壞了它的向後兼容性。
2005 年,開發團隊認為在 PHP 6 中支持 Unicode 将非常有趣,但這一版本完全失敗了。有人認為,這也是 PHP 将自己弄得「聲名狼藉」的主要原因之一。
為了這個失敗的版本,開發團隊浪費了大量的時間和精力。差不多十年之後,也就是 2015 年,PHP 團隊才開發出下一個成功的版本——PHP 7.0。在此期間,PHP 6 銷聲匿迹(2010 年被正式放棄),但 PHP 5 的多個版本仍在使用并不斷更新。
PHP 7.0 是一次重大更新,包含新的 Zend Engine 3 (PHPNG)、各種改進和新功能。它的速度是 PHP 5.6 版本的兩倍。但與此同時,這一版本也破壞了相當一部分向後兼容性。這些改變提高了 PHP 的入門門檻,引發了一部分用戶的不滿,但也有人為 PHP 語言性能的提升和社區的成長感到欣慰。
在之後的幾年裡,PHP 7 又經過了幾次叠代。今年 5 月 14 日,這門語言發布了其最新版 7.4.6 版。今年 4 月,PHP 官方還公布了 PHP 8.0 版本的發布時間表。根據該時間表,PHP 8.0 的 Alpha 1 版本将于 2020 年 6 月 18 日放出。
在這 25 年的發展時間裡,PHP 受到了褒貶不一的評價。有人認為,PHP 存在很多設計缺陷,開發者水平良莠不齊、安全性差。在 Stack OverFlow 的一項調查中,PHP 甚至被票選為最令人讨厭的五種編程語言之一。但也有人認為,PHP 入門門檻低,非常适合 web 開發,即使不是「世界上最好的語言」,也不至于受過多苛責。
愛 PHP 的三個理由
如果有人深愛着 PHP,那一定是因為以下三個原因。
第一, 狀态。每個網頁請求都是從一張完全空白的面闆開始的。除了用以提供初始功能和生命支持的标準全局變量、函數和類之外,其命名空間和全局變量都是未初始化的。通過從已知狀态啟動每個請求,我們可以獲得一種故障隔離:如果請求 t 遇到了軟件缺陷并且失敗了,這個 bug 不會幹擾後續請求 t 1 的運行。
當然,狀态也會存在于程序堆之外的其他地方,并且有可能破壞數據庫、内存緩存或者文件系統。但 PHP 與所有允許存在的可能環境分擔了該弱點。如果将請求之間彼此隔離,可以減少大多數程序缺陷的成本。
第二,并發。單個 Web 請求在單個 PHP 線程上運行。最初看來這像是一種愚蠢的限制。但由于程序是在 Web 服務器的語境中執行的,就會有一個可用的自然并發:Web 請求。異步的 CURL 到本地主機(或者到另一個 Web 服務器)可提供一種 shared-nothing、copy-in/copy-out 的并行機制。實際上,與其他大部分通用語言所提供的鎖共享狀态方法相比,這種方法更加安全,并且對錯誤更具彈性。
最後,PHP 程序在請求級别運行意味着程序員工作流程是快速且高效的,并且随着應用程序的更改一直保持較快的速度。許多語言都宣稱這一點,但是如果它們不為每個請求重置狀态,主事件循環将和請求共享程序級狀态,則它們幾乎總是需要一些啟動時間。
例如,對于一個典型的 Python 應用服務來說,debug 的周期大概像是「想一想」、「編輯」、「重啟服務器」、「發送測試請求」。即使重啟服務器僅需要幾秒,但人類大腦為了保持在這個狀态上,也會花費 15 到 30 秒的時間。
相比之下,PHP 的「想一想」、「編輯」、「重新加載頁面」的周期會讓開發者提高效率。對于一個漫長且複雜軟件項目來說,這将有效地提高生産力。
因此,即使不是 “世界上最好的語言”,PHP 也是一門優秀、高效的編程語言。随着時間的推移,我們可以期待 PHP 團隊能夠開發出更好的版本。
最後問一句:你覺得什麼是世界上最好的語言?
參考鍊接:htt