2024年PHP日本大会

已弃用功能

PHP核心

  • 如果带有默认值的参数后面跟着一个必填参数,则默认值无效。从PHP 8.0.0开始,此功能已弃用,通常可以通过删除默认值来解决,而不会改变功能。

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

    此规则的一个例外是 Type $param = null 形式的参数,其中 null 默认值使类型隐式可为空。此用法仍然允许,但建议改为使用显式可空类型。

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

  • 使用显式设置为 **false** 的 exclude_disabled 调用 get_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

标准库

  • 返回 **true** 或 **false** 的排序比较函数现在将抛出弃用警告,应将其替换为返回小于、等于或大于零的整数的实现。

    <?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'];
    }
    ?>

反射

添加注释

用户贡献的注释 1 条注释

6
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