Функциональность, объявленная устаревшей в PHP 8.0.x

Ядро PHP

  • Если за параметром со значением по умолчанию следует обязательный параметр, то значение по умолчанию не имеет смысла. С PHP 8.0.0 подобный порядок параметров объявлен устаревшим и может быть исправлен путем удаления значения по умолчанию:

    <?php
    function test($a = [], $b) {} // До
    function test($a$b) {}      // После
    ?>

    Одним из исключений из этого правила являются параметры вида Type $param = null, где значение по умолчанию null делает тип неявно обнуляемым. Это пока что еще разрешено, но вместо этого лучше рекомендуется использовать явный тип nullable:

    <?php
    function test(A $a null$b) {} // По-прежнему разрешено
    function test(?A $a$b) {}       // Рекомендуется
    ?>

  • Вызов get_defined_functions() с явно заданным значением false в exclude_disabled устарел и больше не имеет смысла. get_defined_functions() никогда не будет возвращать отключенные функции.

Enchant

LibXML

libxml_disable_entity_loader() объявлена устаревшей. Поскольку теперь используется libxml 2.9.0, в котором загрузка внешних объектов по умолчанию отключена, поэтому использование этой функции больше не требуется для защиты от XXE-атак.

PGSQL / PDO PGSQL

Библиотека стандартных функций

  • Функции сравнения сортировки, возвращающие true или false теперь сгенерирует предупреждение об устаревшей возможности, поэтому их следует переписать, чтобы они возвращали целое число меньше, равное или больше нуля.

    <?php
    // Заменить подобный код:
    usort($arrayfn($a$b) => $a $b);
    // На этот:
    usort($arrayfn($a$b) => $a <=> $b);
    ?>

Zip

  • Использование пустого файла в ZipArchive объявлено устаревшим. Libzip 1.6.0 больше не работает с пустыми zip-архивами. Существующее обходное решение будет удалено в следующей версии.

  • Процедурный API Zip объявлен устаревшим. Вместо него используйте 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