2024 PHP Conference Japan

新功能

PHP 核心

具名引數

已新增具名引數的支援。

屬性 (Attributes)

已新增屬性的支援。

建構子屬性提升

已新增建構子屬性提升(在建構子簽章中宣告屬性)的支援。

聯集類型

已新增聯集類型的支援。

匹配表達式

新增了對 match 表達式 的支援。

Nullsafe 運算子

新增了對 nullsafe 運算子 (?->) 的支援。

其他新功能

  • 新增了 WeakMap 類別。

  • 新增了 ValueError 類別。

  • 現在可以將任意數量的函式參數替換為可變參數,只要類型相容即可。例如,現在允許以下程式碼:

    <?php
    class A {
    public function
    method(int $many, string $parameters, $here) {}
    }
    class
    B extends A {
    public function
    method(...$everything) {}
    }
    ?>

  • static(如「後期靜態綁定」中所示)現在可以用作返回類型。

    <?php
    class Test {
    public function
    create(): static {
    return new static();
    }
    }
    ?>

  • 現在可以使用 $object::class 获取物件的類別名稱。結果與 get_class($object) 相同。

  • newinstanceof 現在可以與任意表達式一起使用,使用 new (expression)(...$args)$obj instanceof (expression)

  • 已套用一些變數語法的 consistency 修正,例如現在允許編寫 Foo::BAR::$baz

  • 新增了 Stringable 介面,如果類別定義了 __toString() 方法,則會自動實作此介面。

  • Traits 現在可以定義抽象私有方法。使用該 trait 的類別必須實作此類方法。

  • throw 現在可以用作表達式。這允許如下用法:

    <?php
    $fn
    = fn() => throw new Exception('Exception in arrow function');
    $user = $session->user ?? throw new Exception('Must have user');

  • 現在在參數列表中允許使用可選的尾隨逗號。

    <?php
    function functionWithLongSignature(
    Type1 $parameter1,
    Type2 $parameter2, // <-- 現在允許使用這個逗號。
    ) {
    }

  • 現在可以寫成 catch (Exception) 來捕捉例外,而無需將其儲存在變數中。

  • 已新增對 mixed 類型的支援。

  • 在父類別中宣告的私有方法不再對子類別的方法強制執行任何繼承規則(除了 final 的私有建構函式之外)。以下範例說明已移除哪些限制

    <?php
    class ParentClass {
    private function
    method1() {}
    private function
    method2() {}
    private static function
    method3() {}
    // 會發出警告,因為 "final" 不再有效:
    private final function method4() {}
    }
    class
    ChildClass extends ParentClass {
    // 現在允許以下所有內容,即使修飾詞與父類別中私有方法的修飾詞不同。
    public abstract function method1() {}
    public static function
    method2() {}
    public function
    method3() {}
    public function
    method4() {}
    }
    ?>

  • 已新增 get_resource_id(),它會傳回與 (int) $resource 相同的值。它在更清晰的 API 下提供相同的功能。

  • 已新增 InternalIterator

日期和時間

DOM

已新增具有新的遍歷和操作 API 的 DOMParentNodeDOMChildNode

篩選器

已新增 FILTER_VALIDATE_BOOL 作為 FILTER_VALIDATE_BOOLEAN 的別名。建議使用新的名稱,因為它使用標準類型名稱。

FPM

新增了一個新的選項 pm.status_listen,允許從不同的端點(例如端口或 UDS 檔案)獲取狀態,這在所有子進程都忙於處理長時間運行的請求時獲取狀態非常有用。

雜湊

HashContext 物件現在可以序列化。

LDAP

新增了 ldap_count_references() 函式,用於返回搜尋結果中參考訊息的數量。

OPcache

如果啟用 opcache.record_warnings ini 設定,OPcache 將會記錄編譯時期的警告,並在下次 include 時重播這些警告,即使它是從快取中提供的。

OpenSSL

新增了加密訊息語法 (CMS) (» RFC 5652) 支援,包含用於加密、解密、簽署、驗證和讀取的函式。API 與 PKCS #7 函式的 API 類似,並新增了新的編碼常數:OPENSSL_ENCODING_DEROPENSSL_ENCODING_SMIMEOPENSSL_ENCODING_PEM

  • openssl_cms_encrypt() 使用憑證加密檔案中的訊息,並將結果輸出到提供的檔案。
  • openssl_cms_decrypt() 解密檔案中的 S/MIME 訊息,並將結果輸出到提供的檔案。
  • openssl_cms_read() 將 CMS 檔案匯出到 PEM 憑證陣列。
  • openssl_cms_sign() 使用憑證和金鑰簽署檔案中的 MIME 訊息,並將結果輸出到提供的檔案。
  • openssl_cms_verify() 驗證資料區塊是否完整,簽署者是否為其聲稱的身分,並返回簽署者的憑證。

正規表示式 (Perl 相容)

新增了 preg_last_error_msg() 函式,用於返回最後一個 PCRE 錯誤的人類可讀訊息。它補充了 preg_last_error(),後者返回的是整數列舉值。

SQLite3

新增了 SQLite3::setAuthorizer() 和相關的類別常數,用於設定一個使用者層級的回呼函式,該函式將用於授權或拒絕對資料庫的操作。

標準函式庫

  • 新增了 str_contains()str_starts_with()str_ends_with() 函式,分別用於檢查 haystack 是否包含、以 needle 開頭或以 needle 結尾。

  • 新增了 fdiv() 函式,它會根據 IEEE 754 語義執行浮點數除法。除以零被認為是明確定義的,並將返回 Inf-InfNaN 其中之一。

  • 新增了 get_debug_type() 函式,它會返回一個可用於錯誤訊息的類型。與 gettype() 不同,它使用標準的類型名稱,為物件返回類別名稱,並指出資源的資源類型。

  • printf() 和相關函式現在支援 %h%H 格式指定符。它們與 %g%G 相同,但始終使用 "." 作為小數點分隔符號,而不是透過 LC_NUMERIC 語系設定來決定。

  • printf() 和相關函式現在支援使用 "*" 作為寬度或精度,在這種情況下,寬度/精度會作為參數傳遞給 printf。這也允許在 %g%G%h%H 中使用精度 -1。例如,以下程式碼可用於重現 PHP 的預設浮點數格式

    <?php
    printf
    ("%.*H", (int) ini_get("precision"), $float);
    printf("%.*H", (int) ini_get("serialize_precision"), $float);
    ?>

  • proc_open() 現在支援偽終端 (PTY) 描述元。以下程式碼將 stdinstdoutstderr 連接到同一個 PTY

    <?php
    $proc
    = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
    ?>

  • proc_open() 現在支援套接字對描述元。以下程式碼將不同的套接字對連接到 stdinstdoutstderr

    <?php
    $proc
    = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
    ?>

    與管道不同,套接字在 Windows 上不會遇到阻塞 I/O 問題。然而,並非所有程式都能正確地使用 stdio 套接字。

  • 排序函式現在是穩定的,這意味著比較相等的元素將保留其原始順序。

  • array_diff()array_intersect() 和其變體現在可以單獨使用一個陣列作為參數。這表示現在可以使用以下用法

    <?php
    // 即使 $excludes 為空也沒問題:
    array_diff($array, ...$excludes);
    // 即使 $arrays 只包含一個陣列也沒問題:
    array_intersect(...$arrays);
    ?>

  • ob_implicit_flush()flag 參數已更改為接受 bool 值,而不是 int 值。

Tokenizer(詞法分析器)

PhpToken 為詞法分析器新增了一個基於物件的介面。它提供更一致且符合人體工學的表示方式,同時更節省記憶且速度更快。

Zip(壓縮)

新增註記

使用者貢獻的註記

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