導讀:從 20 世紀 90 年代中期作為個人專案起步,PHP 已經發展成為最流行的 Web 開發語言之一,為從小型部落格到大型企業應用程式的全部提供支援。
PHP 這個語言在近30年的時間裡經歷了驚人的迭代變化。在過去 10 年內,PHP 以我們無法想象的方式發生著變化。
每個新年我都會寫一篇關於 PHP 現狀的文章,回顧與展望未來。我們現在就開始!
PHP 基金會
以前,我通常以最新 PHP 版本的摘要開始寫。但是,這次我想首先關注 PHP Foundation。
自從 PHP 基金會成立以來,已經一年多,它由一個 10 名志願者加 6 名開發人員的團隊組成,由 PHP 基金會支付報酬,從事 PHP 語言的開發工作。
在去年,我寫了這段文字:
現在尼基塔(一位核心開發人員)已經離開,我有點擔心。但他絕對不是唯一能夠從事 PHP 核心工作的人,在過去的幾年裡,他在 PHP 8.0 和 8.1 方面做了大量工作。
我希望 PHP 基金會能夠儘快跟上步伐,並且在明年有足夠的核心開發人員有時間從事 PHP 方面的工作。
PHP 8.2已經在開發中,儘管還沒有起草很多 RFC。
我認為 2022 年不會是 PHP 最令人興奮的一年,而是增加穩定性的一年,這不會有錯。
我認為,現在可以公平地說,PHP基金會已經正常運作了。他們最近釋出了 2022 年報告,其中顯示了一組相當可觀的數位:
2022年共募集 580,000 美元
基金會將支付6 名開發人員在 PHP 核心上的工作
基金會成員在 php-src 中完成了近乎一半的提交
他們建立了8 個新的 RFC,其中只有一個沒有成功
我認為PHP基金會是 PHP 發展過程發生的最好的事情之一。我希望他們能夠在 2023 年進一步改進這門語言。如果你在一家使用 PHP 的公司工作,我強烈建議你們要考慮捐贈一些。
PHP 8.2
下面來聊聊使用 PHP 8.2。它通常被開發者認為是一個較小的版本,但它實際上具有許多不錯的功能。
下面舉幾個例子:
唯讀類(ReadOnly):
readonly class PostData
{
public function __construct(
public string $title,
public string $author,
public string $body,
public DateTimeImmutable $createdAt,
public PostState $state,
) {}
}
登入後複製
全新的隨機發生器:
$rng = $is_production
? new Random\Engine\Secure()
: new Random\Engine\Mt19937(1234);
$randomizer = new Random\Randomizer($rng);
$randomizer->shuffleString('foobar');
登入後複製
獨立於null的true和false:
function alwaysFalse(): false
{
return false;
}
登入後複製
析取正規化型別:
function generateSlug((HasTitle&HasId)|null $post)
{ /* … */ }
編輯引數:
function connect(
string $user,
#[\SensitiveParameter] string $password
) {
// …
}
登入後複製
當然,還有更多,值得你去探索。
考慮到這些年來 PHP 的發展有多麼瘋狂。我做了一些比較,下面清楚地顯示了這些差異:
生態系統
就像每年一樣,我應該提到Packagist,它是 PHP 的包管理器,到今年它列出了 361,000 個包,比去年增加了 60,000個:
最令人印象深刻的數位是安裝總量。去年我提到過這個數額:
嗯,順便說一句,最近 Packagist 通過了處理超過 500 億次的安裝里程碑。恭喜Packagist!
我剛剛查了一下,Packagist 現在的安裝量是74,492,061,634 次。一年安裝量增加了 240 億,每月安裝量增加 20 億。綜上所述:PHP 生態系統正在快速發展。
每年兩次,我都會發布版本統計資訊。在這些貼文中,我根據 Packagist 的資料分析了整個社群的 PHP 版本使用情況。
我想再次分享該貼文中的圖表:2013 年到現在的時間線,顯示每個版本的使用歷史記錄。
雖然很高興看到 PHP 8.* 的使用率急劇上升,但也有很大一部分人仍然停留在舊的、執行緩慢的與不安全的 PHP 版本上。我對 2023 年的希望是看到那些舊版本號下降得更快此。我在以上的版本統計貼文中是這樣寫的:
這些資料精美地形象化了 PHP 社群內部的分歧:一部分與現代 PHP 保持同步,而另一部分則無助地落在後面。
一說到升級,我就想特別提到一個工具:Rector。
Rector 是一款免費的自動化工具,可幫助升級你的 PHP 程式碼庫。它所需要的只是少量的設定,它就會為你做大量的工作。
我最近用它來更新我的社群驅動內容聚合器 Aggregate to PHP 8.2,它非常有趣且易於使用。
在釋出我的版本統計貼文後,有幾個人告訴我他們還沒有更新,並且停留在 PHP 7.* 上,我問他們為什麼?他們告訴我,這只是太多的體力勞動。有意思的是,甚至沒有人嘗試使用像 Rector 這樣的工具來幫助他們……
我堅信「程式語言」不僅僅是編譯器:它是在定義「程式語言」方面發揮同等作用的工具和生態系統,我真的認為很多人、專案和企業都會受益,如果他們研究使用像 Rector 這樣的自動化工具。
既然我在談論生態系統,就不能不提到 PHP 的兩個最大的框架:Laravel和Symfony。
在過去的幾年裡,Laravel 取得了巨大的發展。他們現在僱傭了8 名全職開發人員來開發框架及其生態系統。最重要的是,JetBrains 的開發調查報告稱,67% 的 PHP 開發人員使用 Laravel。
雖然如今與 Laravel 相比,Symfony 作為一個框架可能不太受歡迎,但它仍然是 PHP 社群中最成熟、最穩定的框架之一。它更常用於企業應用程式開發,但它的獨立元件在整個 PHP 生態系統中都很流行——Laravel 也有一些對 Symfony 元件的依賴,所以不少 Symfony 軟體包進入Packagist 的頂級軟體包列表也就不足為奇了。
我還應該提到 WordPress。老實說,我對WordPress既愛又恨。作為使用者,WordPress 很棒。它的安裝和使用非常簡單,我認為這些年來它贏得了每一點人氣。不過,作為一名開發人員,WordPress 讓我感到難過。無法與現代和安全的 PHP 版本保持同步,給整個 PHP 社群蒙上了陰影。
目前,WordPress 僅對PHP 8.0 提供 Beta 支援。現在,需要明確的是:PHP 8.0 於 2020 年釋出,3年後的生命週期結束了——而 WordPress 目前尚不支援它……
當然,不能正確支援較新的 PHP 版本是有原因的,應該由使用者決定它們是否正確。我個人的觀點是,像 WordPress 一樣堅持向後相容的決定主要是業務驅動的:WordPress 的很大一部分是商業部分,並且他們的客戶群的很大一部分執行舊的 PHP 版本。這是一個惡性迴圈,雙方互相阻礙,並在一定程度上阻礙了整個 PHP 社群發展。
另一方面,我們應該認識到這樣一個事實,即在將近 20 年後,沒有多少軟體專案能夠像 WordPress 一樣流行和相關,所以也許他們關於向後相容性的策略是正確的?
超集
最後,我不能不提一下我對PHP的長期夢想。
我現在寫下它,我希望有一天它會成為現實:PHP 的超集,具有適當的 IDE 與靜態分析器支援功能。
我希望它出現的原因有很多。如果你願意,你可以閱讀和傾聽它們,但我真的希望它能成為現實。在 2023 年看到一個被廣泛接受和支援的超集尚待時日,但一些小步驟已經開始了。我肯定會密切關注PXP,它會把事情引向更正確的方向。
綜上所述,我感覺各位開發者一定會喜歡 2023 年!最後一句,為防止萬一你是新來的,我是 Brent,是JetBrains 的開發者佈道師。
注:英文原文地址是:https://stitcher.io/blog/php-in-2023