弃用功能

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) {} // 推荐
    ?>

  • 使用 exclude_disabled 显式设置为 false 调用 get_defined_functions() 已被弃用,不再起作用。 get_defined_functions() 永远不会包含禁用函数。

Enchant

LibXML

libxml_disable_entity_loader() 已被弃用。 由于现在需要 libxml 2.9.0,外部实体加载默认情况下保证被禁用,并且此函数不再需要用于防御 XXE 攻击,除非使用(仍然容易受到攻击的)LIBXML_NOENT。 在这种情况下,建议使用 libxml_set_external_entity_loader() 重构代码以禁止加载外部实体。

PGSQL / PDO PGSQL

标准库

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

反射

添加笔记

用户贡献笔记 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_]*\)
?>

for
<?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