PHP 8.1.28 Released!

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

Ядро PHP

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

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

<?php
1
? 2 : 3 ? 4 : 5; // устарело
(1 ? 2 : 3) ? 4 : 5; // хорошо
1 ? 2 : (3 ? 4 : 5); // хорошо
?>

Скобки не требуются при вложении в средний операнд, поскольку это всегда однозначно и не зависит от ассоциативности:

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.

add a note

User Contributed Notes 2 notes

up
10
Ahmad Asjad
3 years ago
(\?[^php]).*(\:).*(\?).*(\:[^=])
Above regex can help others to find the nested ternary operator
up
-25
Techlemur
3 years ago
^((?!\().*)(\?[^php]).*(\:)([\s\v]+)(?!\().*[^\/](\?)([\s\v\h]*).*(\:[^=])
Regex to find deprecated nested ternaries
To Top