目錄
只讀類別的增強
類型化類別常數
#[Override] 属性
数组中的负索引
匿名只读类
新函数 json_validate
Randomizer 增强
动态类常量获取
更具针对性的日期/时间异常
优化了 unserialize() 错误处理
range() 函數的改進
特徵和靜態屬性
堆疊溢位偵測
新函數mb_str_pad
魔術方法閉包和命名參數
不變的常數可見性
棄用內容
首頁 後端開發 PHP8 PHP 8.3 重磅發表:創新與增強,開創未來

PHP 8.3 重磅發表:創新與增強,開創未來

Nov 24, 2023 am 11:01 AM
php

PHP 8.3 於 2023 年 11 月 23 日發布,標誌著該語言的發展又邁出了重要的一步。該版本引入了許多新功能、效能改進和棄用,旨在增強 PHP 開發體驗。在這份綜合指南中,我們將深入探討這些更新,提供見解、技巧和創造性的程式碼範例,以幫助您適應並充分利用 PHP 8.3。

只讀類別的增強

PHP 8.3 對唯讀類別的複製行為進行了修改,允許在複製期間重新初始化唯讀屬性。這一更改解決了深度克隆中的特定邊緣情況。參考以下範例:

class Article {
    public readonly DateTime $publishedOn;
    public function __construct(DateTime $publishedOn) {
        $this->publishedOn = $publishedOn;
    }
    public function __clone() {
        // PHP 8.3 允许
        $this->publishedOn = new DateTime();
    }
}
登入後複製

變更允許更靈活地管理唯讀屬性,特別是在複製具有複雜結構的物件時。

類型化類別常數

PHP 8.3 允許開發人員為類別常數指定類型,從而提高類型安全性並使程式碼更加清晰。例如:

class Config {
    const API_KEY = 'your-api-key';
}
登入後複製

功能增強了類別常數的穩健性,使它們成為類別契約的組成部分。

#[Override] 属性

PHP 8.3 中的 #[Override]属性用于声明某个方法有意重写父方法。该属性可在重命名或删除父方法时捕获错误,从而提高代码质量。例如:

abstract class BaseClass
{
    public function defaultMethod(): int
    {
        return 1;
    }
}
final class DerivedClass extends BaseClass
{
    #[Override]
    public function defaultMethod(): int
    {
        return 2;// 故意重写
    }
}
登入後複製

属性增加了额外的安全层,确保您的覆盖始终是有意且可识别的。

数组中的负索引

PHP 8.3 对数组处理负索引方式进行了改进。在以前的版本中,如果使用负索引将一个项目添加到空数组,然后添加另一个项目,则第二个项目会从 0 开始。在 PHP 8.3 中,第二个项目将放置在下一个负索引处,即 -1。例如:

$array = [];
$array[-1] = '第一个';
$array[] = '第二';
var_export($array); // [&#39;first&#39;, &#39;second&#39;] 在 PHP < 8.3 中,[&#39;first&#39;, &#39;second&#39;] 在 PHP 8.3 中
登入後複製

一变化使得负指数的处理更加可预测和一致。

匿名只读类

PHP 8.3 引入了对匿名类标记为只读的支持,这为动态创建不可变对象提供了更大的灵活性。例如:

$anonymousClass = new readonly class {
    public function __construct(
        public string $name = &#39;Anonymous&#39;,
    ) {}
};
登入後複製

增强功能使只读类在各种编程场景中更加通用,扩大了其应用范围。

新函数 json_validate

PHP 8.3 新增的 json_validate() 函数提供了一种节省内存的方法来检查字符串是否为有效的 JSON。此函数特别适用于需要验证 JSON 而不对其进行解码的场景。它的工作原理如下:

$jsonString = &#39;{"姓名": "小明", "年龄": 20}&#39;;
$isJsonValid = json_validate($jsonString);
登入後複製

该函数简化了 JSON 验证,使其更加高效和简单。

Randomizer 增强

PHP 8.3 对 PHP 8.2 中引入的 Randomizer 类进行了增强,新增了从字符串生成随机字节以及获取指定范围内的随机浮点数的方法。例如:

$randomizer = new Randomizer();
$randomBytes = $randomizer->getBytesFromString(&#39;abcdef&#39;, 4);
$randomFloat = $randomizer->getFloat(0.0, 1.0);
登入後複製

新方法扩展了 Randomizer 类的功能,使其能够生成更丰富、更灵活的随机数据。

动态类常量获取

PHP 8.3 新增了动态获取类常量的语法,使代码在使用常量时更加灵活、易读。例如:

class Setting {
  const MODE = &#39;产生&#39;;
  public static function getCurrentMode() {
    return static::MODE;
  }
}
$currentMode = Setting::getCurrentMode();
登入後複製

这种语法简化了动态访问类常量的过程,增强了代码的可读性和可维护性。

更具针对性的日期/时间异常

PHP 8.3 对日期和时间函数的异常处理进行了改进,新增了针对特定错误情况的专用异常。此改进使错误报告更加描述性和准确,从而提高了调试和处理日期/时间相关问题的效率。

优化了 unserialize() 错误处理

PHP 8.3 中的 unserialize() 函数在遇到问题时始终抛出 E_WARNING 错误,从而提供更统一和可预测的错误处理。此更改简化了序列化场景中的调试和错误处理。

range() 函數的改進

PHP 8.3 對 range() 函數進行了多項改進,包括針對無效邊界輸入拋出 TypeError 異常,以及針對無效步長值拋出 ValueError 異常。這些改進使函數的行為更加直觀和一致。

特徵和靜態屬性

PHP 8.3 中,使用具有靜態屬性的特徵將重新宣告從父類別繼承的靜態屬性,為目前類別建立單獨的靜態屬性儲存。此變更使特徵中靜態屬性的行為與類別中靜態屬性的行為一致。

堆疊溢位偵測

PHP 8.3 新增了新的 INI 指令來偵測堆疊溢出,從而防止分段錯誤。此功能增強了 PHP 應用程式的穩定性和可靠性,尤其是在複雜或遞歸場景中。

新函數mb_str_pad

PHP 8.3 新增的 mb_str_pad() 函數填補了多位元組字串函數的空白,對於處理UTF-8 等多位元組編碼至關重要。此函數可確保無論編碼如何,都能正確填入字串。

魔術方法閉包和命名參數

PHP 8.3 允許從魔術方法建立閉包並將命名參數傳遞給這些閉包,從而增強了魔術方法的靈活性和表現力,使其更加強大和通用。

不變的常數可見性

PHP 8.3 修正了介面實作時常數可見性檢查的 bug。此變更確保了常數可見性的一致性,與 PHP 中可見性的一般原則保持一致。

棄用內容

與往常一樣,PHP 8.3 包含了一些棄用內容,以逐步淘汰過時或效率較低的功能,推動語言向前發展。這些棄用包括對 mb_strimwidth() 和 ldap_connect() 等函數的變更。

PHP 8.3 的發布是 PHP 語言不斷發展和改進的另一個里程碑。新功能、增強功能和棄用為開發人員提供了更多工具和功能,可用於編寫更有效率、更健壯和更可維護的程式碼。在探索和採用這些變更時,請務必徹底測試您的應用程序,並隨時了解 PHP 生態系統的最新發展。

以上是PHP 8.3 重磅發表:創新與增強,開創未來的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles