2024 日本 PHP 研討會

已棄用的功能

PHP 核心

  • 如果具有預設值的參數後面跟著一個必填參數,則預設值將失效。此用法自 PHP 8.0.0 起已被棄用,通常可以透過移除預設值來解決,而不會改變功能。

    <?php
    function test($a = [], $b) {} // 之前
    function test($a, $b) {} // 之後
    ?>

    此規則的一個例外是 Type $param = null 形式的參數,其中 null 預設值使類型隱式可為 null。此用法仍然允許,但建議改用明確的可為 null 類型。

    <?php
    function test(A $a = null, $b) {} // 仍允許
    function test(?A $a, $b) {} // 建議
    ?>

  • 使用明確設定 exclude_disabledfalseget_defined_functions() 已被棄用,且不再有任何作用。get_defined_functions() 將永遠不會包含已停用的函式。

Enchant

LibXML

libxml_disable_entity_loader() 已被棄用。由於現在需要 libxml 2.9.0,外部實體載入預設會被停用,因此除非使用(仍然容易受到攻擊的)LIBXML_NOENT,否則不再需要此函式來防範 XXE 攻擊。在這種情況下,建議使用 libxml_set_external_entity_loader() 重構程式碼以禁止載入外部實體。

PGSQL / PDO PGSQL

標準函式庫 (Standard Library)

  • 排序比較函式若回傳 truefalse 現在會拋出棄用警告,並且應該改用回傳小於、等於或大於零的整數的實作方式來取代。

    <?php
    // 舊寫法
    usort($array, fn($a, $b) => $a > $b);
    // 新寫法
    usort($array, fn($a, $b) => $a <=> $b);
    ?>

Zip

  • 使用空檔案作為 ZipArchive 已被棄用。Libzip 1.6.0 不再接受空檔案作為有效的 zip 封存檔。現有的解決方法將在下一個版本中移除。

  • Zip 的程序式 API 已被棄用。請改用 ZipArchive。可以使用 ZipArchive::statIndex()for 迴圈來迭代所有項目。

    <?php
    // 使用程序式 API 迭代
    assert(is_resource($zip));
    while (
    $entry = zip_read($zip)) {
    echo
    zip_entry_name($entry);
    }

    // 使用物件導向 API 迭代
    assert($zip instanceof ZipArchive);
    for (
    $i = 0; $entry = $zip->statIndex($i); $i++) {
    echo
    $entry['name'];
    }
    ?>

反射 (Reflection)

新增註釋

使用者貢獻的註釋 1 則註釋

dominique dot vienne at ik dot me
3 年前
如果您嘗試在指定必要參數之前指定選用參數來取得所有方法/函式,請嘗試使用此正規表達式(單行)

<?php
function\s
+[a-z][a-zA-Z0-9_]*\((?:\$[a-z][a-zA-Z0-9]*\s*,\s*)*
(?:\$[
a-z][A-Za-z0-9_]*\s*=[^\$\)]+)+\$[a-z][a-zA-Z0-9_]*\)
?>

適用於
<?php
public function test($a, $b) {
$a = [];
$b = [$abc => $ss[],
];
}

private function
too($c, $a = true, $b) {
}

protected function
bar($a = []) {
}

public function
foo($a, $b = true) {
}

public function
fooBar32($a=true, $b = [], $c) {
}

private function
oo_bAr($a = []) {
}
?>
它會匹配 too() 和 fooBar32()

祝您遷移順利! ;)
To Top