Устаревшая функциональность

Ядро PHP

Вложенные тернарные операторы без явного указания скобок

Во вложенных тернарных операциях должны явно использоваться круглые скобки, чтобы определить порядок операций. Раньше, если скобки явно не заданы, в большинстве случаев левая ассоциативность не приводила к ожидаемому поведению.

<?php
5;   // устарело
(3) ? 5// хорошо
: (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.