Устаревшая функциональность
Ядро PHP
Вложенные тернарные операторы без явного указания скобок
Во вложенных тернарных операциях должны явно использоваться круглые скобки, чтобы определить порядок операций. Раньше, если скобки явно не заданы, в большинстве случаев левая ассоциативность не приводила к ожидаемому поведению.
<?php
1 ? 2 : 3 ? 4 : 5; // устарело
(1 ? 2 : 3) ? 4 : 5; // хорошо
1 ? 2 : (3 ? 4 : 5); // хорошо
?>
Скобки not требуются при вложении в средний операнд, поскольку это всегда однозначно и не зависит от ассоциативности:
1 ? 2 ? 3 : 4 : 5 // хорошо
Обращение к индексу массива и строки через фигурные скобки
Синтаксис доступа к массиву и строке с использованием фигурных скобок объявлен устаревшим.
Используйте $var[$idx]
вместо $var{$idx}
.
Приведение типа (real) и функция is_real()
Приведение типа (real)
объявлено устаревшим,
вместо этого используйте (float)
.
Функция is_real() также объявлена устаревшей, вместо нее используйте is_float().
Отмена привязки $this
при использовании $this
Отмена привязки $this
в нестатическом замыкании,
которое использует $this
, объявлена устаревшей.
Ключевое слово parent
вне родительского класса
Использование parent
внутри класса, у которого нет родителя, объявлено устаревшим,
а в будущем произойдет ошибка компиляции. А пока ошибка будет только при обращении к родителю во время выполнения.
INI-опция allow_url_include
Конфигурационная директива allow_url_include объявлена устаревшей. При включенной опции будет вызвано уведомление об устаревшей возможности во время загрузки.
Недопустимые символы в основных функциях преобразования
Передача недопустимых символов в base_convert(), bindec(), octdec() теперь вызывает уведомление об устаревшей возможности. Результат все равно будет вычислен так, как если бы недопустимых символов не было. Ведущие и завершающие пробелы, а также префиксы типа 0x (в зависимости от системы счисления) по-прежнему разрешены.
Использование array_key_exists() с объектом
Использование array_key_exists() с объектом объявлено устаревшим. Вместо этого следует использовать либо isset(), либо property_exists().
Функции, связанные с волшебными кавычками
Функции get_magic_quotes_gpc() и get_magic_quotes_runtime() объявлены устаревшими.
Они всегда возвращают false
.
Функция hebrevc()
Функция hebrevc() объявлена устаревшей.
Ее можно заменить на выражение nl2br(hebrev($str))
,
либо лучше всего использовать поддержку Unicode RTL.
Функция convert_cyr_string()
Функция convert_cyr_string() объявлена устаревшей. Ее можно заменить либо на mb_convert_string(), либо iconv() или на класс UConverter.
Функция money_format()
Функция money_format() объявлена устаревшей. Она может быть заменена функциональностью интернационализации - классом NumberFormatter.
Функция ezmlm_hash()
Функция ezmlm_hash() объявлена устаревшей.
Функция restore_include_path()
Функция restore_include_path() объявлена устаревшей.
Ее можно заменить на ini_restore('include_path')
.
Использование implode с нерекомендуемым порядком параметров
Передача параметров в implode() в обратном порядке объявлена устаревшей -
используйте implode($glue, $parts)
вместо implode($parts, $glue)
.
COM
Импорт библиотек типов с регистрацией констант без учета регистра объявлен устаревшим.
Фильтрация
Фильтр FILTER_SANITIZE_MAGIC_QUOTES
объявлен устаревшим,
вместо него используйте FILTER_SANITIZE_ADD_SLASHES
.
Многобайтовые строки
Передача нестрокового шаблона в mb_ereg_replace() объявлена устаревшей. В данный момент нестроковые значения интерпретируются как кодовые точки ASCII. В PHP 8 шаблон будет обрабатываться как строка.
Передача кодировки в качестве 3-го параметра в mb_strrpos() объявлена устаревшей. Вместо этого передавайте позицию как 0, а кодировку в 4-м параметре.
Облегчённый протокол доступа к каталогам (LDAP)
Функции ldap_control_paged_result_response() и ldap_control_paged_result() объявлены устаревшими. Для управления постраничным режимом используйте функцию ldap_search().
Reflection
Вызовы ReflectionType::__toString() теперь создают уведомление об устаревшей возможности. Этот метод объявлен устаревшим в пользу использования ReflectionNamedType::getName() в документации с PHP 7.1, но не выдавал соответствующего уведомления по техническим причинам.
Методы export()
у всех классов Reflection объявлены устаревшими.
Теперь создавайте объект Reflection и преобразуйте его в строку:
<?php
// Вместо ReflectionClass::export(Foo::class, false) используйте:
echo new ReflectionClass(Foo::class), "\n";
// Вместо $str = ReflectionClass::export(Foo::class, true) используйте:
$str = (string) new ReflectionClass(Foo::class);
?>
Сокеты
Флаги AI_IDN_ALLOW_UNASSIGNED
и
AI_IDN_USE_STD3_ASCII_RULES
для функции
socket_addrinfo_lookup() объявлены устаревшими
из-за обновления glibc.