老牌腳本語言PHP推出最新的8.1版本,在眾多新興程式語言競爭之下,持續增加新功能來維持競爭力,在PHP 8.1中,加入列舉(Enumerations)、唯讀屬性(Readonly Properties),同時還有一級可呼叫語法(First-class Callable Syntax)等新功能,提升開發者的程式碼編寫體驗。
PHP 8.1這個重大更新中,受開發者期待的新功能之一便是列舉,列舉讓開發者自定義型別,限制有限數值的可能值,官方提到,該功能在定義特定領域模型時特別有用,因為能夠讓無效狀態無法被表示。
列舉功能普遍在各種程式語言出現,而具有的特性也有所差異,在PHP,列舉是一個特殊的物件,列舉本身是一個類別,並且在可能的情況,都屬於該類別的單一實體物件,這代表Enum case是有效的物件,列舉可在任何可能使用物件的地方使用,包括型別檢查。而列舉最常被使用的例子,便是內建的布林型別,這是一個列舉型別,具有合法的值true和false。
在這個PHP版本,加入了一個唯讀(Readonly)屬性修飾符,可以避免在初始化後,屬性遭到修改,官方提到,數值物件通常是不可變的,屬性在建構函式初始化後就不應該修改,但是PHP過去並無法強制執行此約束,最接近的選擇,是將屬性宣告成私有屬性,並且以公共存取子(Getter)對外公開。
雖然這種替代做法,縮小了可能對單個類別宣告進行修改的範圍,但實際並沒有使屬性成為唯讀,而且還需要使用存取子寫法,更顯得不方便,而現在PHP 8.1對唯讀屬性提供第一級支援,將讓開發者能夠直接公開唯讀屬性,而且不用擔心類別不可變屬性會被外部修改破壞。
新版PHP中一級可呼叫語法,使得開發者能夠取得所有函式的參照,而Never回傳型別,則是當函式或是方法宣告為Never型別時,就不會回傳值,不過仍會拋出異常,並且透過呼叫die()、exit()、trigger_error() 等來結束腳本執行。
另外,PHP 8.1以Fibers來實現輕量級協作並行,Fibers可以創建像Generator般,能夠被暫停或是恢復執行的程式碼區塊,但是卻可從堆疊中任何位置進行,官方提到,Fibers並不會自動提供並行性,仍需要一個事件循環,只不過能夠允許阻塞和非阻塞實作共享相同的API。
PHP基金會在成立幾天後,隨即發布了PHP 8.1,該基金會組成的目的,是要保管來自貢獻者的資金,並確保PHP能夠繼續發展,目前RFC流程並不會改變,語言發展決策權也保留給php.internals社群。
熱門新聞
2024-12-03
2024-11-20
2024-11-15
2024-11-15