php作為Web界第一大語言近年來熱度不夠,但是這幾年的進步和成長卻沒有中斷。在2022伊始,我們來一起學習一下目前PHP的現狀以及最新版本帶來的特性。
PHP 8.1
PHP最新的8.0版本于年前發布。 雖然重大變化不多,但是有很多小特性確實值得稱道。
枚舉類型
枚舉在PHP 8.1中內置支持:
enum Status
{
case draft;
case published;
case archived;
public function color(): string
{
return match($this)
{
Status::draft => 'grey',
Status::published => 'green',
Status::archived => 'red',
};
}
}
構造函數中的new
在 PHP 8.1 中,可以在初始化默認形參的值、靜態變量、全局常量和特性實參時使用新的表達式。
class PostStatemachine
{
public function __construct(
private State $state = new Draft(),
) {
}
}
只讀屬性
只讀屬性為初始化(即向其賦值)后無法更改的屬性。
class CCData
{
public function __construct(
public readonly string $title,
public readonly PostState $state,
public readonly DateTimeImmutable $publishedAt,
) {}
}
與PHP 8.0 的promote相結合,可以用于構造一個很干凈優雅的數據類。對比PHP 5.6要實現上面同樣功能的相同類:
class CCData
{
private $title;
private $state;
private $publishedAt;
public function __construct(
$title,
$state,
$publishedAt = null
) {
$this->title = $title;
$this->state = $state;
$this->publishedAt = $publishedAt;
}
public function getTitle()
{
return $this->title;
}
public function getState()
{
return $this->state;
}
public function getPublishedAt()
{
return $this->publishedAt;
}
}
可以看到明顯的優勢,有沒有?
PHP在每個版本中會帶來此類的這些很棒的語法小糖果改進。隨著不斷迭代改進,相信PHP會變得越來越優雅。
靜態分析
PHP中的靜態分析正在顯著改善:
諸如Laravel一樣的框架越來越多地采用靜態類型 (編寫代碼和文檔塊的唯一目的是幫助靜態分析);
PhpStorm 添加了對泛型支持,如果以編寫泛型代碼并讓IDE理解它,那將非常有意義;
PhpStan and psalm也在不斷完善。
異步PHP
異步社區中的一個令人興奮的發展是,來自Amp和ReactPHP(兩個主要的異步參與者)的開發人員齊心協力制作了一個號稱與光纖速率相兼容的事件循環實現,稱為 Revolt PHP。
與整個社區相比,異步PHP僅被一小部分人使用; 但是,仍然可以看到異步社區正在變得強大并擁抱現代PHP。
無服務器 PHP
無服務器是現代開發的一個方向和確實,PHP在該方面也沒有落后。Matthieu Napoli開發了一個無服務器框架Bref可以讓PHP開發人員了解這種相對較新的PHP使用方式,使無服務器 PHP 變得簡單。
PHP基金會
兩個月前,PHP世界傳來了一個相當大的消息,甚至可能是2021年最大的消息:最活躍的核心維護者之一Nikita正在從事LLVM的工作,但同時也有一項新舉措得到了幾個人的支持大公司最終使核心發展可持續。
簡而言之,PHP基金會是一個非營利組織,其唯一目標是資助PHP核心開發。該計劃由JetBrains推動,他們已經向該項目承諾了100,000美元。目前已經籌集了329,920.75 美元;
這筆錢將用于資助核心開發,用于幫助PHP推廣,讓以前無法?使用PHP的人們打開大門。
生態系統
提到PHP生態不得不說Packagist,現在有超過300萬個注冊版本和超300的包。其生態系統不斷發展壯大,2022 年也不例外。
另外,此前剛剛不久,Packagist 通過了處理超過500億次安裝的里程碑。