Функциональность, объявленная устаревшей в 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
-
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
libxml_disable_entity_loader() объявлена устаревшей. Поскольку теперь используется libxml 2.9.0, в котором загрузка внешних объектов по умолчанию отключена, поэтому использование этой функции больше не требуется для защиты от XXE-атак.
PGSQL / PDO PGSQL
-
Константа
PG_VERSION_STR
теперь имеет то же значение, что иPG_VERSION
и поэтому объявлена устаревшей. -
Псевдонимы функций в модуле pgsql объявлены устаревшими. Смотрите в следующем списке, какие функции следует использовать вместо них:
- pg_errormessage() → pg_last_error()
- pg_numrows() → pg_num_rows()
- pg_numfields() → pg_num_fields()
- pg_cmdtuples() → pg_affected_rows()
- pg_fieldname() → pg_field_name()
- pg_fieldsize() → pg_field_size()
- pg_fieldtype() → pg_field_type()
- pg_fieldnum() → pg_field_num()
- pg_result() → pg_fetch_result()
- pg_fieldprtlen() → pg_field_prtlen()
- pg_fieldisnull() → pg_field_is_null()
- pg_freeresult() → pg_free_result()
- pg_getlastoid() → pg_last_oid()
- pg_locreate() → pg_lo_create()
- pg_lounlink() → pg_lo_unlink()
- pg_loopen() → pg_lo_open()
- pg_loclose() → pg_lo_close()
- pg_loread() → pg_lo_read()
- pg_lowrite() → pg_lo_write()
- pg_loreadall() → pg_lo_read_all()
- pg_loimport() → pg_lo_import()
- pg_loexport() → pg_lo_export()
- pg_setclientencoding() → pg_set_client_encoding()
- pg_clientencoding() -> pg_client_encoding()
Библиотека стандартных функций
-
Функции сравнения сортировки, возвращающие
true
илиfalse
теперь сгенерирует предупреждение об устаревшей возможности, поэтому их следует переписать, чтобы они возвращали целое число меньше, равное или больше нуля.<?php
// Заменить подобный код:
usort($array, fn($a, $b) => $a > $b);
// На этот:
usort($array, fn($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
-
ReflectionFunction::isDisabled() объявлен устаревшим, так как больше невозможно создать ReflectionFunction для отключенной функции. Этот метод теперь всегда возвращает
false
. -
ReflectionParameter::getClass(), ReflectionParameter::isArray() и ReflectionParameter::isCallable() объявлены устаревшими. Вместо них следует использовать ReflectionParameter::getType() и API ReflectionType.