if a $_SESSION['example'] variable has not been set before being used, PHP version 7.4 just returned false, PHP 8.0 throws a PHP Warning: Undefined array key "example"
Если за параметром со значением по умолчанию следует обязательный параметр, то значение по умолчанию не имеет смысла. С 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.
if a $_SESSION['example'] variable has not been set before being used, PHP version 7.4 just returned false, PHP 8.0 throws a PHP Warning: Undefined array key "example"
If you try to get all methods / functions assigning an optional argument before a mandatory one, try this regex (single line)
<?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 = []) {
}
?>
it will match too() and fooBar32()
Have a nice migration! ;)