Если не требуется поддержка версий 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 устарели.
Они никогда не имели смысла.