2024 PHP Conference Japan

新功能

PHP 核心

整數八進位字面值前綴

八進位整數現在可以在整數字面值中使用明確的 0o/0O 前綴,類似於二進位和十六進位整數字面值。

<?php
014
; // 非前綴八進位字面值
0o14; // 前綴八進位字面值
?>

使用字串鍵解包陣列

新增了使用字串鍵解包陣列的支援。

<?php
$arr1
= [1, 'a' => 'b'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>

在參數解包後使用具名參數

現在可以在參數解包後指定具名參數。例如: foo(...$args, named: $arg)。

檔案上傳的完整路徑鍵值

檔案上傳現在提供額外的 full_path 鍵值,其中包含上傳檔案的完整路徑(而不仅仅是檔名)。這旨在與「upload webkitdirectory」搭配使用。

列舉

新增了對列舉 (Enumerations) 的支援。

纖程 (Fibers)

新增了對纖程 (Fibers) 的支援。

一級可呼叫語法

現在可以使用myFunc(...) 語法來建立可呼叫物件的閉包,這與 Closure::fromCallable('myFunc') 相同。

注意... 是語法的一部分,而不是省略。

交集類型

新增了對交集類型 (Intersection Types) 的支援。

警告

交集類型不能與聯集類型 (Union Types)一起使用。

Never 類型

新增了一個新的僅限返回類型 never。這表示函式會 exit()、拋出例外或不終止。

初始化器中的 new

現在可以在參數預設值、靜態變數、全域常數初始化器和屬性參數中使用 new ClassName() 表達式。物件現在也可以傳遞給 define()

唯讀屬性

新增了對唯讀 (readonly) 屬性的支援。

Final 類別常數

新增了對類別常數的 final 修飾符的支援。此外,介面常數預設變為可覆蓋。

CURL

新增了 CURLOPT_DOH_URL 選項。

在 libcurl >= 7.71.0 時,新增了 blob 憑證的選項。

新增了 CURLStringFile,可以用來從 字串 而不是檔案發送檔案。

<?php
$file
= new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>

FPM

新增了 openmetrics 狀態格式。Prometheus 可以使用它來獲取 FPM 指標。

為動態流程管理器新增了一個新的池選項,稱為 pm.max_spawn_rate。它允許在選擇動態 pm 時以更快的速度啟動多個子進程。預設值為 32,這是之前的硬編碼值。

GD

如果 libgd 使用 Avif 支援建置,現在可以透過 imagecreatefromavif()imageavif() 支援 Avif。

雜湊(Hash)

以下函式 hash()hash_file()hash_init() 現在支援一個額外的可選 options 參數,可用於傳遞演算法特定資料。

MurmurHash3

新增了對 MurmurHash3 的支援,並支援串流處理。實作了以下變體:

  • murmur3a,32 位元雜湊
  • murmur3c,適用於 x86 的 128 位元雜湊
  • murmur3f,適用於 x64 的 128 位元雜湊

初始雜湊狀態可以透過 options 陣列中的 seed 鍵傳遞,例如:

<?php
$h
= hash("murmur3f", $data, options: ["seed" => 42]);
echo
$h, "\n";
?>
有效的種子值範圍從 0 到平台定義的 UINT_MAX,通常為 4294967295

xxHash

新增了對 xxHash 的支援。實作了以下變體:

  • xxh32,32 位元雜湊
  • xxh64,64 位元雜湊
  • xxh3,64 位元雜湊
  • xxh128,128 位元雜湊

初始雜湊狀態可以透過 options 陣列中的 seed 鍵傳遞,例如:

<?php
$h
= hash("xxh3", $data, options: ["seed" => 42]);
echo
$h, "\n";
?>
也支援透過在 options 陣列中傳遞 secret 鍵來使用密鑰。
<?php
$h
= hash("xxh3", $data, options: ["secret" => "at least 136 bytes long secret here"]);
echo
$h, "\n";
?>
自訂密钥的品質對於結果雜湊值的品質至關重要。強烈建議密钥使用盡可能最佳的熵值。

MySQLi

新的 INI 指令 mysqli.local_infile_directory

新增了 mysqli.local_infile_directory INI 指令,可用於指定允許載入檔案的目錄。僅在 mysqli.allow_local_infile 未啟用的情況下才有意義,因為在啟用的情況下,所有目錄都是允許的。

在 execute 中綁定參數

現在可以透過將參數作為陣列傳遞給 mysqli_stmt::execute() 來綁定參數。所有值都將綁定為字串。僅允許列表陣列。當 MySQLi 使用 libmysqlclient 編譯時,此新功能將無法使用。

<?php
$stmt
= $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>

新增方法 mysqli_result::fetch_column()

新增了 mysqli_result::fetch_column(),允許從結果集中擷取單個純量值。新方法接受一個可選的基於 0 的 column 參數,類型為 int,指定要從哪個欄位擷取。

<?php
$result
= $mysqli->query('SELECT username FROM users WHERE id = 123');
echo
$result->fetch_column();
?>

PDO

新增了PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY 屬性,可用於指定允許載入檔案的目錄。僅在 PDO::MYSQL_ATTR_LOCAL_INFILE 未啟用的情況下才有意義,因為在啟用的情況下,所有目錄都是允許的。

PDO_SQLite

現在支援 SQLite 的 "file:" DSN 語法,允許指定額外的旗標。如果設定了 open_basedir,則此功能將無法使用。

<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>

POSIX (可移植作業系統介面)

新增了 POSIX_RLIMIT_KQUEUESPOSIX_RLIMIT_NPTS 這兩個 rlimits (資源限制)。這些 rlimits 僅在 FreeBSD 上可用。

標準

fputcsv() 現在接受一個新的 eol 參數,允許定義自訂的換行字元序列,預設值保持不變,為 "\n"

SPL (標準 PHP 程式庫)

SplFileObject::fputcsv() 現在接受一個新的 eol 參數,允許定義自訂的換行字元序列,預設值保持不變,為 "\n"

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top