Updated PHP Windows builds for Brotli security fix

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

Ядро PHP

Неявно обнуляемые параметры

Тип параметра неявно расширяется типом null, если значение по умолчанию для параметра равно null.

Следующий код:

<?php

function foo(T1 $a = null) {}

?>
потребуется преобразовать вот так:
<?php

function foo(T1|null $a = null) {}

?>
или так:
<?php

function foo(?T1 $a = null) {}

?>

Однако, если за объявлением параметра со значением null по умолчанию идёт обязательный параметр:

<?php

function foo(T1 $a, T2 $b = null, T3 $c) {}

?>
код потребуется преобразовать вот так:
<?php

function foo(T1 $a, T2|null $b, T3 $c) {}

?>
или так:
<?php

function foo(T1 $a, ?T2 $b, T3 $c) {}

?>
поскольку объявление необязательного параметра перед обязательным устарело.

Возведение нуля в отрицательную степень

Возведение числа в отрицательную степень эквивалентно взятию обратной величины числа, возведённого в положительную степень, противоположную отрицательной. Например: 10-2 — то же, что 1 / 102. Поэтому возведение числа 0 в отрицательную степень соответствует делению на 0: 0-2 — то же, что 1 / 02, или 1 / 0. Поэтому такое поведение устарело.

Изменение касается поведения оператора возведения в степень ** и функции pow().

Следовать семантике стандарта IEEE 754 помогает новая функция fpow().

Подчёркивание _ как название класса

Именование класса символом _ устарело:

<?php

class _ {}

?>

Замечание:

Имена классов, которые начинаются с подчёркивания, не устарели:

<?php

class _MyClass {}

?>

Вызов функции trigger_error() с флагом E_USER_ERROR

Вызов функции trigger_error() с аргументом error_level, который равен значению константы E_USER_ERROR, устарел.

Такие вызовы потребуется заменить выбрасыванием исключения или вызовом языковой конструкции exit(), смотря что уместнее.

Константа E_STRICT

Поскольку уровень ошибки E_STRICT удалили, константа устарела.

Модуль cURL

Константа CURLOPT_BINARYTRANSFER устарела.

Модуль Date

Сигнатура метода DatePeriod::__construct(string $isostr, int $options = 0) устарела. Вместо устаревшего метода рекомендуют пользоваться методом DatePeriod::createFromISO8601String().

Константы SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING и SUNFUNCS_RET_DOUBLE устарели. Константы устарели вследствие устаревания функций date_sunset() и date_sunrise() в PHP 8.1.0.

Модуль DBA

Передача значения null или false в функцию dba_key_split() устарела. При передаче таких значений функция вернёт false.

Модуль DOM

Константа DOM_PHP_ERR устарела.

Следующие свойства официально устарели:

Модуль Hash

Передача недопустимых параметров в хеш-функции устарела.

Модуль Intl

Вызов функции intlcal_set() и метода IntlCalendar::set() с более чем двумя аргументами устарел. Вместо них рекомендуют пользоваться методом IntlCalendar::setDate() или IntlCalendar::setDateTime().

Вызов функции intlgregcal_create_instance() и метода IntlGregorianCalendar::__construct() с более чем двумя аргументами устарел. Вместо них рекомендуют пользоваться методом IntlGregorianCalendar::createFromDate() или IntlGregorianCalendar::createFromDateTime().

Модуль LDAP

Вызов функции ldap_connect() с более чем двумя аргументами устарел. Вместо неё рекомендуют пользоваться функцией ldap_connect_wallet().

Вызов функции ldap_exop() с более чем четырьмя аргументами устарел. Вместо неё рекомендуют пользоваться функцией ldap_exop_sync().

Модуль MySQLi

Функция mysqli_ping() и метод mysqli::ping() устарели, поскольку функцию переподключения удалили в PHP 8.2.0.

Функция mysqli_kill() и метод mysqli::kill() устарели. Завершать запущенный запрос помогает SQL-команда KILL.

Функция mysqli_refresh() и метод mysqli::refresh() устарели. Очищать кеш БД помогает SQL-команда FLUSH. Константы семейства MYSQLI_REFRESH_* тоже устарели.

Явная передача параметра mode в функцию mysqli_store_result() устарела. Константа MYSQLI_STORE_RESULT_COPY_DATA тоже устарела, поскольку работала только вместе с функцией.

Драйвер PDO_PGSQL

Экранирование знаков вопроса ?? внутри строк, обёрнутых знаками доллара, устарело. Требование экранировать знаки вопроса внутри строк отменили, поскольку драйвер PDO_PGSQL теперь содержит внутренний SQL-парсер с поддержкой оборачивания строк знаками доллара.

Драйвер PGSQL

Сигнатуры функций pg_fetch_result(), pg_field_prtlen() и pg_field_is_null() с двумя параметрами устарели. Вместо сигнатуры с двумя параметрами рекомендуют использовать сигнатуру с тремя параметрами со значением null для параметра row.

Модуль Random

Функция lcg_value() устарела, поскольку часто работала неправильно. Вместо неё рекомендуют использовать метод Random\Randomizer::getFloat().

Модуль Reflection

Вызов метода ReflectionMethod::__construct() с одним аргументом устарел. Вместо него рекомендуют использовать метод ReflectionMethod::createFromMethodName().

Модуль Session

Вызов функции session_set_save_handler() с более чем двумя аргументами устарел. Вместо неё рекомендуют использовать сигнатуру с двумя аргументами.

Изменение значения директив session.sid_length и session.sid_bits_per_character в INI-настройках устарело. Вместо изменения значений директив рекомендуют обновить бэкенд хранилища сессий, чтобы он принимал 32-символьные шестнадцатеричные идентификаторы сессий, и прекратить изменение этих INI-параметров.

Изменение значения директив session.use_only_cookies, session.use_trans_sid, session.trans_sid_tags, session.trans_sid_hosts и session.referer_check в INI-настройках устарело. Константа SID тоже устарела.

Модуль SOAP

Передача int-значений в аргументах метода SoapServer::addFunction() устарела. Для получения списка, который содержит название каждой PHP-функции, Элементы массива, который возвращает функция get_defined_functions(), сводят к одному уровню, когда требуется экспортировать список всех PHP-функций.

Константа SOAP_FUNCTIONS_ALL устарела.

Модуль SPL

Метод SplFixedArray::__wakeup() устарел, поскольку реализует методы SplFixedArray::__serialize() и SplFixedArray::__unserialize(), которыми рекомендуют заменить устаревший метод.

Значение по умолчанию для параметра escape в методах SplFileObject::setCsvControl(), SplFileObject::fputcsv() SplFileObject::fgetcsv() устарело. Значение по умолчанию рекомендуют передавать явно либо позиционно, либо через именованные аргументы. Это не касается методов SplFileObject::fputcsv() и SplFileObject::fgetcsv(), если новое значение по умолчанию установили методом SplFileObject::setCsvControl().

Стандартные функции

Сигнатура функции stream_context_set_option() с двумя аргументами устарела. Вместо неё рекомендуют пользоваться сигнатурой функции stream_context_set_options() с четырьмя аргументами.

Десериализация строк с тегом S в верхнем регистре функцией unserialize() устарела.

Значение по умолчанию для параметра escape в функциях fputcsv(), fgetcsv() и str_getcsv() устарело. Значение по умолчанию рекомендуют передавать явно либо позиционно, либо через именованные аргументы.

Модуль XML

Функция xml_set_object() устарела.

Передача в функцию xml_set_* строк, которые не принадлежат типу callable, устарела.

+Добавить

Примечания пользователей 1 note

up
4
john dot fro at mailinator dot com
1 year ago
Try using [$this, 'method_string'] in place of 'method_string' for functions like xml_set_element_handler, etc. 

As in xml_set_element_handler($this-parser, [$this, 'method'], [$this, 'another_method']);  

This is what the note about "callable" means--you need to reference the actual method in a callable way, not just use a string.
To Top