溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP 8.1有什么新特性

發(fā)布時間:2021-07-10 13:59:22 來源:億速云 閱讀:203 作者:chen 欄目:編程語言

這篇文章主要介紹“PHP 8.1有什么新特性”,在日常操作中,相信很多人在PHP 8.1有什么新特性問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP 8.1有什么新特性”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

PHP 8.1目前正在積極開發(fā)中,可能會在2021年11月末左右發(fā)布。我們已經(jīng)了解了一些函數(shù),更改和不贊成使用的內(nèi)容,因此讓我們逐一介紹它們。

# New features

與每個版本一樣,PHP 8.1添加了一些不錯的新函數(shù)。請記住,該列表將在一年中增長。我還將列出尚未實現(xiàn)的函數(shù),但是很有可能最終使用該語言。我將確保始終標記這些函數(shù)。

# 用字符串鍵解包數(shù)組 RFC

PHP 7.4 中已經(jīng)允許數(shù)組拆包,但它僅適用于數(shù)字鍵。之前不支持字符串鍵的原因是因為關(guān)于如何合并數(shù)組重復(fù)項沒有任何共識。 RFC通過遵循 array_merge 的語義來徹底解決此問題:

$array1 = ["a" => 1];

$array2 = ["b" => 2];

$array = ["a" => 0, ...$array1, ...$array2];var_dump($array); // ["a" => 1, "b" => 2]

# 新增 array_is_list 函數(shù) RFC

您可能需要不時處理一次:確定數(shù)組的鍵是否按數(shù)字順序,從索引0開始。就像 json_encode 決定是否應(yīng)將數(shù)組編碼為數(shù)組或?qū)ο蟆?/p>

PHP 8.1添加了一個內(nèi)置函數(shù)來確定數(shù)組是否是具有這些語義的列表:

$list = ["a", "b", "c"];array_is_list($list); // true$notAList = [1 => "a", 2 => "b", 3 => "c"];array_is_list($notAList); // false$alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"];array_is_list($alsoNotAList); // false

# 八進制整數(shù)表示法 RFC

現(xiàn)在,您可以使用0o和0O表示八進制數(shù)字。通過在數(shù)字前面加上 0 來表示前面的符號仍然有效。

016 === 0o16; // true016 === 0O16; // true

# Enums枚舉 RFC

此RFC仍在討論中。

添加枚舉將是PHP的重大改進,因此我非常期待看到此RFC進一步發(fā)展。為了讓您快速預(yù)覽它們的外觀,下面是一個代碼示例:

enum Status {  case Pending;  case Active;  case Archived;
}

這就是它們的用法:

class Post{public function __construct(private Status $status = Status::Pending;
    ) {}public function setStatus(Status $status): void{// …}
}

$post->setStatus(Status::Active);

# 限制$GLOBALS使用 RFC

對$GLOBALS的使用方式進行小的更改將對所有數(shù)組操作的性能產(chǎn)生重大影響。 Nikita很好地解釋了 RFC 中的問題和解決方案。更改意味著$GLOBALS無法再處理某些邊緣情況。 "不再支持對 $GLOBALS進行整體寫入。以下所有操作都會產(chǎn)生編譯時錯誤"

$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;unset($GLOBALS);

最重要的是,通過引用傳遞$GLOBALS會生成運行時錯誤:

by_ref($GLOBALS); // Run-time error

Nikita分析了Packagist上排名前2000的包裝,僅發(fā)現(xiàn)23個案件將受到此更改的影響。我們可以得出結(jié)論,此更改(從技術(shù)上來說是重大突破)的影響將很小,這就是內(nèi)部人員決定在PHP 8.1中添加它的原因。

# 棄用將null傳遞給內(nèi)部函數(shù) RFC

更改很簡單:內(nèi)部函數(shù)當前接受null表示不可為空的參數(shù),該RFC棄用了該行為。例如,這目前是可能的:

str_contains("string", null);

在PHP 8.1中,這些類型的錯誤將引發(fā)棄用警告,在PHP 9中,它們將轉(zhuǎn)換為類型錯誤。

到此,關(guān)于“PHP 8.1有什么新特性”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI