PHP 8.4.1 Released!

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

Ядро PHP

Реализация Serializable без __serialize() и __unserialize()

Если не требуется поддержка версий PHP меньше 7.4, должны быть реализованы только эти два магических метода, иначе нужно реализовать как методы интерфейса, так и магические методы.

Передача null параметрам встроенных функций, не допускающим значение NULL

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

<?php
var_dump
(str_contains("foobar", null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
// is deprecated
?>

Неявная несовместимость преобразования float к int

Теперь нужно избегать неявного преобразования числа с плавающей точкой (float) к целому числу (int), которое приводит потере точности. Это влияет на ключи массива (array), объявления целочисленных (int) типов в принудительном режиме и операторов, работающие с целыми числами (int).

<?php
$a
= [];
$a[15.5]; // устарело, поскольку значение ключа теряет компонент 0.5
$a[15.0]; // работает, так как 15.0 == 15
?>

Вызов static-элемента в трейтах

Вызов static-метода или доступ к static-свойству непосредственно в трейте устарел. К статическим методам и свойствам следует обращаться только в классе, использующем трейт.

Возврат не массива (array) из __sleep()

Возвращаемое значение __sleep(), не являющееся массивом, теперь сгенерирует уведомление.

Возврат значения по ссылке из функции void

<?php
function &test(): void {}
?>
Такая функция сбивает с толку, поэтому теперь выдаст следующий E_NOTICE: Only variable references should be returned by reference (По ссылке должны возвращаться только ссылки на переменные).

Автовивификация из false

Автовивификация - это процесс создания нового массива (array) при добавлении нового значения. Автовивификация запрещена для скалярных значений, однако false был исключением. Теперь такое поведение устарело.

<?php
$arr
= false;
$arr[] = 2; // устарело
?>

Замечание:

Автовивификация из null и неопределённого значения по-прежнему разрешена:

<?php
// Из неопределённого значения
$arr[] = 'какое-то значение';
$arr['doesNotExist'][] = 2;
// Из null
$arr = null;
$arr[] = 2;
?>

ctype

Проверка нестроковых аргументов

Передача нестрокового аргумента устарела. В будущем аргумент будет интерпретироваться как строка вместо кода ASCII. В зависимости от предполагаемого поведения аргумент должен быть приведён к строке (string) явным образом или через вызов chr(). Это изменение относится ко всем функциям ctype_*().

Date

Функции date_sunrise() и date_sunset() устарели в пользу date_sun_info().

Функция strptime() устарела. Вместо неё используйте date_parse_from_format() (для синтаксического анализа, не зависящего от языкового стандарта) или IntlDateFormatter::parse() (для синтаксического анализа, зависящего от языкового стандарта).

Функция strftime() и gmstrftime() устарели. Используйте вместо них функцию date() (для форматирования, не зависящего от языкового стандарта) или метод IntlDateFormatter::format() (для форматирования, зависящего от языкового стандарта).

Фильтр

Фильтры FILTER_SANITIZE_STRING и FILTER_SANITIZE_STRIPPED устарели.

INI-директива filter.default устарела.

GD

Параметр num_points функции imagepolygon(), imageopenpolygon() и imagefilledpolygon() устарел.

Хеширование

Функции mhash(), mhash_keygen_s2k(), mhash_count(), mhash_get_block_size() и mhash_get_hash_name() устарели. Вместо них используйте функции hash_*().

IMAP

Константа NIL устарела. Вместо неё используйте 0.

Intl

Вызов IntlCalendar::roll() с логическим значением (bool) устарел. Используйте 1 и -1 вместо true и false соответственно.

Многобайтовые строки

Вызов mb_check_encoding() без каких-либо аргументов устарел.

MySQLi

Свойство mysqli_driver::$driver_version устарело. Оно было неактуальным, используйте вместо него PHP_VERSION_ID.

Вызов метода mysqli::get_client_info() или mysqli_get_client_info() с аргументом mysqli устарел. Используйте mysqli_get_client_info() без каких-либо аргументов, чтобы получить информацию о версии клиентской библиотеки.

Метод mysqli::init() устарел. Замените вызовы parent::init() на parent::__construct().

OCI8

INI-директива oci8.old_oci_close_semantics устарела.

ODBC

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

PDO

Режим выборки PDO::FETCH_SERIALIZE устарел.

PgSQL

Функциям pgsql_*() теперь нужно явно передавать параметр connection.

SOAP

Параметр ssl_method в SoapClient::__construct() устарел в пользу параметров контекста потока SSL.

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

Вызов key(), current(), next(), prev(), reset() или end() с объектами (object) устарел. Либо сначала преобразуйте объект (object) в массив (array) с помощью функции get_mangled_object_vars(), либо используйте методы, предоставляемые классом, реализующим интерфейс Iterator, например, ArrayIterator.

INI-директива auto_detect_line_endings устарела. При необходимости обработайте разрывы строк "\r" вручную.

Константы FILE_BINARY и FILE_TEXT устарели. Они никогда не имели смысла.

Добавить

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

Пользователи ещё не добавляли примечания для страницы
To Top