2024 年 PHP 日本研討會

新功能

PHP 核心

更具彈性的 Heredoc 和 Nowdoc 語法

文件字串的結尾標記不再需要後接分號或換行符號。此外,結尾標記可以縮排,在這種情況下,縮排將從文件字串中的所有行移除。

陣列解構支援參考賦值

陣列解構現在支援使用 [&$a, [$b, &$c]] = $d 語法進行參考賦值。 list() 也支援相同的語法。

Instanceof 運算子接受字面值

現在允許在 instanceof 運算子中使用字面值作為第一個運算元,在這種情況下,結果始終為 false

使用 CompileError 異常取代一些編譯錯誤

新增了一個 CompileError 異常,ParseError 繼承自它。現在少數編譯錯誤會拋出 CompileError 異常,而不是產生致命錯誤。目前這只影響 token_get_all()TOKEN_PARSE 模式下可能拋出的編譯錯誤,但未來可能會轉換更多錯誤。

允許在函式呼叫中使用尾隨逗號

現在允許在函式和方法呼叫中使用尾隨逗號。

支援 Argon2id

現在,設定參數 --with-password-argon2[=dir] 支援在 password_hash()password_verify()password_get_info()password_needs_rehash() 函式中使用 Argon2i 和 Argon2id 雜湊。可以使用 PASSWORD_ARGON2ID 常數來雜湊和驗證密碼。要在 password_*() 函式中支援 Argon2i 和 Argon2id,現在需要將 PHP 鏈結到 libargon2 參考函式庫 ≥ 20161029。

FastCGI 程序管理器

新增了用於自訂 FPM 記錄的新選項

log_limit
這個全域選項可用於設定記錄行的長度限制,允許記錄超過 1024 個字元的訊息而不換行。它也修正了各種換行問題。
log_buffering
這個全域選項允許在沒有額外緩衝的情況下進行實驗性記錄。
decorate_workers_output
當啟用 catch_workers_output 時,此池選項允許停用工作程序輸出的裝飾。

BC Math 函式

bcscale() 現在也可以用作 getter 來取得目前正在使用的精度。

輕量級目錄存取協定 (LDAP)

已將 LDAP 控制項的完整支援新增到 LDAP 查詢函式和 ldap_parse_result() 中。

多位元組字串函式

完整的字元大小寫轉換和字元摺疊支援

已新增對完整字元大小寫轉換和字元摺疊的支援。與簡單的字元大小寫轉換不同,完整的字元大小寫轉換可能會改變字串的長度。例如

<?php
mb_strtoupper
("Straße");
// PHP 7.2 輸出 STRAßE
// PHP 7.3 輸出 STRASSE
?>
不同的字 casing 對應與折疊模式可透過 mb_convert_case() 取得。只執行無條件、與語言無關的完整字 casing 對應。

大小寫不敏感的字串操作使用字 casing 折疊

大小寫不敏感的字串操作現在在比較期間使用字 casing 折疊而不是字 casing 對應。這表示現在會有更多字元被視為(大小寫不敏感地)相等。

MB_CASE_TITLE 執行標題大小寫轉換

使用 MB_CASE_TITLEmb_convert_case() 現在根據 Cased 和 CaseIgnorable 衍生的 Unicode 屬性執行標題大小寫轉換。尤其這也改善了引號和撇號的處理。

支援 Unicode 11

多位元組字串 的資料表已更新為 Unicode 11。

支援長字串

多位元組字串函式 現在可以正確支援大於 2GB 的字串。

效能提升

多位元組字串 擴充功能的效能已全面顯著提升。最大的改進在於字 casing 轉換函式。

支援命名捕獲

mb_ereg_* 函式現在支援命名捕獲。類似 mb_ereg() 的匹配函式現在將使用群組編號和名稱返回命名捕獲,類似於 PCRE。

<?php
mb_ereg
('(?<word>\w+)', '國', $matches);
// => [0 => "國", 1 => "國", "word" => "國"];
?>
此外,mb_ereg_replace() 現在支援 \k<>\k'' 標記法,以在取代字串中參考命名捕獲。
<?php
mb_ereg_replace
('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<>\k'' 也可用於編號參考,這也適用於大於 9 的群組編號。

Readline

已將 completion_append_charactercompletion_suppress_append 選項的支援新增至 readline_info()。這些選項僅在 PHP 連結至 libreadline(而不是 libedit)時才可用。

新增筆記

使用者貢獻的筆記 1 則筆記

yoander dot valdes at yahoo dot com
5 年前
「函式和方法呼叫中現在允許尾端逗號」指的是函式參數,例如:

<?php

function my1() {
echo
"xxxxxx\n";
}

function
my2() {
echo
"yyyyyy\n";
}

my1(),my2(); // PHP 解析錯誤:語法錯誤

my1(,); // PHP 解析錯誤:語法錯誤

my1(1,); my2(2,); // 正常

?>
To Top