
PHP,祝你 25 歲生日快樂。
機器之心報道,機器之心編輯部。
「隻要是用過 PHP 的程式員,都知道兩件事:第一,這是一種糟糕的語言,如果有其他選擇,自己絕不會再使用 PHP;第二,曆史上一些非常成功的項目都在用 PHP。」
Fine,這兩點并不沖突。作為一門程式設計語言,PHP 是有很多的缺陷,但和 PHP 環境具備的優點相比,這些缺陷也就不值一提了。和其他語言相比,PHP 為項目的搭建、更改和運作提供了更好的支援。
2020 年 6 月 8 日,「世界上最好的語言」PHP 迎來了自己的 25 周歲生日。
<?php
print "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 子系統。同年,http://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,那一定是因為以下三個原因。
第一, 狀态。每個網頁請求都是從一張完全空白的面闆開始的。除了用以提供初始功能和生命支援的标準全局變量、函數和類之外,其命名空間和全局變量都是未初始化的。通過從已知狀态啟動每個請求,我們可以獲得一種故障隔離:如果請求 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 團隊能夠開發出更好的版本。
最後問一句:你覺得什麼是世界上最好的語言?
參考連結:https://www.jetbrains.com/zh-cn/lp/php-25/https://slack.engineering/taking-php-seriously-cf7a60065329