Если за параметром со значением по умолчанию следует обязательный параметр, то значение по умолчанию не имеет смысла. С 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_broker_set_dict_path() и enchant_broker_get_dict_path() объявлены устаревшими, поскольку они недоступны ни в libenchant < 1.5 ни в libenchant-2.
enchant_dict_add_to_personal() объявлена устаревшей; используйте вместо неё enchant_dict_add().
enchant_dict_is_in_session() объявлена устаревшей; используйте вместо неё enchant_dict_is_added().
enchant_broker_free() и enchant_broker_free_dict() объявлены устаревшими; вместо неё примените к объекту функцию unset.
Константа ENCHANT_MYSPELL
и ENCHANT_ISPELL
объявлены устаревшими.
libxml_disable_entity_loader() объявлена устаревшей. Поскольку теперь используется libxml 2.9.0, в котором загрузка внешних объектов по умолчанию отключена, поэтому использование этой функции больше не требуется для защиты от XXE-атак, если не используется (все ещё уязвимая) LIBXML_NOENT
. В этом случае рекомендуется провести рефакторинг кода с помощью libxml_set_external_entity_loader(), чтобы подавить загрузку внешних сущностей.
Константа PGSQL_LIBPQ_VERSION_STR
теперь имеет то же значение, что и PGSQL_LIBPQ_VERSION
и поэтому объявлена устаревшей.
Псевдонимы функций в модуле pgsql объявлены устаревшими. Смотрите в следующем списке, какие функции следует использовать вместо них:
Функции сравнения сортировки, возвращающие true
или false
теперь сгенерирует предупреждение об устаревшей возможности, поэтому их следует переписать, чтобы они возвращали целое число меньше, равное или больше нуля.
<?php
// Заменить подобный код:
usort($array, fn($a, $b) => $a > $b);
// На этот:
usort($array, fn($a, $b) => $a <=> $b);
?>
Использование пустого файла в 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'];
}
?>
ReflectionFunction::isDisabled() объявлен устаревшим, так как больше невозможно создать ReflectionFunction для отключённой функции. Этот метод теперь всегда возвращает false
.
ReflectionParameter::getClass(), ReflectionParameter::isArray() и ReflectionParameter::isCallable() объявлены устаревшими. Вместо них следует использовать ReflectionParameter::getType() и API ReflectionType.