Если не требуется поддержка версий 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), которое приводит потере точности. Это влияет на ключи массива (array), объявления целочисленных (int) типов в принудительном режиме и операторов, работающие с целыми числами (int).
<?php
$a = [];
$a[15.5]; // устарело, поскольку значение ключа теряет компонент 0.5
$a[15.0]; // работает, так как 15.0 == 15
?>
Вызов static-метода или доступ к static-свойству непосредственно в трейте устарел. К статическим методам и свойствам следует обращаться только в классе, использующем трейт.
Возвращаемое значение __sleep(), не являющееся массивом, теперь сгенерирует уведомление.
<?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;
?>
Передача нестрокового аргумента устарела.
В будущем аргумент будет интерпретироваться как строка вместо кода ASCII.
В зависимости от предполагаемого поведения аргумент должен быть приведён к строке (string)
явным образом или через вызов chr().
Это изменение относится ко всем функциям ctype_*()
.
Функции 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 устарела.
Параметр num_points
функции imagepolygon(),
imageopenpolygon() и imagefilledpolygon() устарел.
Функции mhash(),
mhash_keygen_s2k(),
mhash_count(),
mhash_get_block_size()
и mhash_get_hash_name() устарели.
Вместо них используйте функции hash_*()
.
Константа NIL
устарела.
Вместо неё используйте 0
.
Вызов IntlCalendar::roll() с логическим значением (bool) устарел.
Используйте 1
и -1
вместо true
и false
соответственно.
Вызов mb_check_encoding() без каких-либо аргументов устарел.
Свойство 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().
INI-директива oci8.old_oci_close_semantics устарела.
Функция odbc_result_all() устарела.
Режим выборки PDO::FETCH_SERIALIZE
устарел.
Функциям pgsql_*()
теперь нужно явно передавать параметр connection.
Параметр 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
устарели.
Они никогда не имели смысла.