您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP 8.1有什么新特性”,在日常操作中,相信很多人在PHP 8.1有什么新特性問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP 8.1有什么新特性”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
PHP 8.1目前正在積極開發中,可能會在2021年11月末左右發布。我們已經了解了一些函數,更改和不贊成使用的內容,因此讓我們逐一介紹它們。
與每個版本一樣,PHP 8.1添加了一些不錯的新函數。請記住,該列表將在一年中增長。我還將列出尚未實現的函數,但是很有可能最終使用該語言。我將確保始終標記這些函數。
PHP 7.4 中已經允許數組拆包,但它僅適用于數字鍵。之前不支持字符串鍵的原因是因為關于如何合并數組重復項沒有任何共識。 RFC通過遵循 array_merge 的語義來徹底解決此問題:
$array1 = ["a" => 1]; $array2 = ["b" => 2]; $array = ["a" => 0, ...$array1, ...$array2];var_dump($array); // ["a" => 1, "b" => 2]
您可能需要不時處理一次:確定數組的鍵是否按數字順序,從索引0開始。就像 json_encode 決定是否應將數組編碼為數組或對象。
PHP 8.1添加了一個內置函數來確定數組是否是具有這些語義的列表:
$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
現在,您可以使用0o和0O表示八進制數字。通過在數字前面加上 0
來表示前面的符號仍然有效。
016 === 0o16; // true016 === 0O16; // true
此RFC仍在討論中。
添加枚舉將是PHP的重大改進,因此我非常期待看到此RFC進一步發展。為了讓您快速預覽它們的外觀,下面是一個代碼示例:
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的使用方式進行小的更改將對所有數組操作的性能產生重大影響。 Nikita很好地解釋了 RFC 中的問題和解決方案。更改意味著$GLOBALS無法再處理某些邊緣情況。 "不再支持對 $GLOBALS進行整體寫入。以下所有操作都會產生編譯時錯誤"
$GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS;unset($GLOBALS);
最重要的是,通過引用傳遞$GLOBALS會生成運行時錯誤:
by_ref($GLOBALS); // Run-time error
Nikita分析了Packagist上排名前2000的包裝,僅發現23個案件將受到此更改的影響。我們可以得出結論,此更改(從技術上來說是重大突破)的影響將很小,這就是內部人員決定在PHP 8.1中添加它的原因。
更改很簡單:內部函數當前接受null表示不可為空的參數,該RFC棄用了該行為。例如,這目前是可能的:
str_contains("string", null);
在PHP 8.1中,這些類型的錯誤將引發棄用警告,在PHP 9中,它們將轉換為類型錯誤。
到此,關于“PHP 8.1有什么新特性”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。