Изменения, ломающие обратную совместимость
Преобразование числовых ключей при приведении объектов и массивов
Теперь числовые ключи лучше обрабатываются при приведении массивов к объектам и
объектов к массивам (через явное приведение, либо используя settype()).
Это означает, что числовые (или числа в виде строк) ключи из массивов, конвертированные
в объекты теперь будут доступны:
И теперь числовые (или числа в виде строк) ключи объектов доступны при конвертации в массивы:
Запрещена передача null
в get_class()
Раньше передача null
в функцию get_class() возвращала
имя класса, из которого был сделан вызов. Это поведение было удалено и теперь вместо
этого будет вызвана ошибка уровня E_WARNING
. Для
достижения того же поведения, что и раньше, следует просто опустить аргумент.
Предупреждение при подсчёте неисчисляемых типов
Теперь при использовании count() с параметром,
который нельзя посчитать будет возникать ошибка уровня E_WARNING
(это также касается sizeof() как псевдонима этой функции).
Переход от ресурсов к объектам в модуле Hash
В рамках долгосрочной миграции отказа от ресурсов, модуль
Hash был обновлён
для использования объектов вместо ресурсов. Это изменение должно быть плавным
для PHP-разработчиков, за исключением случаев, когда используются проверки is_resource()
(которые нужно заменить на использование is_object()).
Улучшены значения по умолчанию в SSL/TLS
Были сделаны следующие изменения в значения по умолчанию:
-
tls://
теперь по умолчанию используется TLSv1.0 или TLSv1.1 или TLSv1.2
-
ssl://
псевдоним tls://
-
Константы
STREAM_CRYPTO_METHOD_TLS_*
по умолчанию равны TLSv1.0
или TLSv1.1 + TLSv1.2, вместо TLSv1.0
Возвращаемое значение gettype() для закрытых ресурсов
Раньше использование gettype() на закрытом ресурсе возвращало строку "unknown type"
. Теперь будет возвращена строка
"resource (closed)"
.
is_object() и __PHP_Incomplete_Class
Раньше использование is_object() на классе
__PHP_Incomplete_Class возвращало false
.
Теперь будет возвращаться true
.
Повышены уровни ошибок неопределённых констант
Не полностью определённые ссылки на неопределённые константы теперь будут генерировать
E_WARNING
(вместо E_NOTICE
).
В следующей основной версии PHP они будут генерировать исключения Error.
Поддержка Windows
Официально поддерживаемые минимальные версии Windows теперь являются Windows 7/Server
2008 R2.
Проверка значений свойств по умолчанию трейта
Проверки совместимости значений свойств по умолчанию трейта больше не выполняют приведение типа.
object
для имён классов
Имя object
ранее было мягко зарезервировано с PHP 7.0.
Теперь оно полноценное зарезервированное слово,
запрещающее использовать его в качестве имени класса, трейта или интерфейса.
Поддержка NetWare
Поддержка NetWare была удалена.
Если sort_flags
равен
SORT_STRING
, ранее массив
array
копировался, а не уникальные элементы
удалялись (сохраняя значения цифровых индексов),
но теперь создаётся новый массив путём добавления уникальных элементов.
Это может привести к различным числовым индексам.
Изменения bcmod() с числами с плавающей точкой
Функция bcmod() больше не обрезает числа с плавающей точкой до целых. Таким образом, её поведение теперь соответствует
fmod(), а не оператору %
.
Например, bcmod('4', '3.5')
теперь возвращает
0.5
вместо 1
.
Опция функции json_decode(),
JSON_OBJECT_AS_ARRAY
, теперь используется, если второй параметр (assoc) равен null
. Ранее
JSON_OBJECT_AS_ARRAY
всегда игнорировался.
Числа, генерируемые rand() и
mt_rand() для определённого параметра переинициализации (seed), могут отличаться от PHP 7.1 на
64-битных машинах (из-за исправления ошибки модульного смещения в реализации).
Настройка конфигурации sql.safe_mode
была удалена.
Входящие Cookies
Начиная с PHP 7.2.34 имена входящих cookie
больше не декодируются из URL-закодированной строки из соображений безопасности.