Раньше функция number_format() возвращала -0. Хотя это совершенно правильно в соответствии со спецификацией чисел с плавающей точкой IEEE 754, эта странность нежелательна для отображения отформатированных чисел в удобочитаемой форме.
<?php
var_dump(number_format(-0.01)); // теперь выводит string(1) "0" вместо string(2) "-0"
Теперь числовые ключи лучше обрабатываются при приведении массивов к объектам и объектов к массивам (через явное приведение, либо используя settype()).
Это означает, что числовые (или числа в виде строк) ключи из массивов, конвертированные в объекты теперь будут доступны:
<?php
// приведение массива к объекту
$arr = [0 => 1];
$obj = (object)$arr;
var_dump(
$obj,
$obj->{'0'}, // теперь работает
$obj->{0} // теперь работает
);
Результат выполнения данного примера:
object(stdClass)#1 (1) { ["0"]=> // теперь это строковый ключ, а не числовой int(1) } int(1) int(1)
И теперь числовые (или числа в виде строк) ключи объектов доступны при конвертации в массивы:
<?php
// приведение объекта в массив
$obj = new class {
public function __construct()
{
$this->{0} = 1;
}
};
$arr = (array)$obj;
var_dump(
$arr,
$arr[0], // теперь работает
$arr['0'] // теперь работает
);
Результат выполнения данного примера:
array(1) { [0]=> // теперь это числовой ключ, а не строковый int(1) } int(1) int(1)
NULL
в get_class()
Раньше передача NULL
в функцию get_class() возвращала
имя класса, из которого был сделан вызов. Это поведение было удалено и теперь вместо
этого будет будет вызвана ошибка уровня E_WARNING
. Для
достижения того же поведения, что и раньше, следует просто опустить аргумент.
Теперь при использовании count() с параметром,
который нельзя посчитать будет возникать ошибка уровня E_WARNING
(это также касается sizeof() как псевдонима этой функции).
<?php
var_dump(
count(null), // NULL нельзя подсчитать
count(1), // числа нельзя подсчитать
count('abc'), // строки нельзя подсчитать
count(new stdclass), // объекты, не реализующие интерфейс Countable, нельзя подсчитать
count([1,2]) // массивы можно подсчитать
);
Результат выполнения данного примера:
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d int(0) int(1) int(1) int(1) int(2)
В рамках долгосрочной миграции отказа от ресурсов, модуль Hash был обновлен для использования объектов вместо ресурсов. Это изменение должно быть плавным для PHP-разработчиков, за исключением случаев, когда используются проверки is_resource() (которые нужно заменить на использование is_object()).
Были сделаны следующие изменения в значения по умолчанию:
Раньше использование gettype() на закрытом ресурсе возвращало строку "unknown type". Теперь будет возвращена строка "resource (closed)".
Раньше использование is_object() на классе
__PHP_Incomplete_Class возвращало FALSE
.
Теперь будет возвращаться TRUE
.
Не полностью определенные ссылки на неопределенные константы теперь будут генерировать
E_WARNING
(вместо E_NOTICE
).
В следующей основной версии PHP они будут генерировать исключения Error.
Официально поддерживаемые минимальные версии Windows теперь являются Windows 7/Server 2008 R2.
Проверки совместимости значений свойств по умолчанию трейта больше не выполняют приведение типа.
Имя object ранее было мягко зарезервировано с PHP 7.0. Теперь оно полноценное зарезервированное слово, запрещающее использовать его в качестве имени класса, трейта или интерфейса.
Поддержка NetWare была удалена.
SORT_STRING
Если sort_flags
равен
SORT_STRING
, ранее массив
array
копировался, а не уникальные элементы
удалялись (сохраняя значения цифровых индексов),
но теперь создается новый массив путем добавления уникальных элементов.
Это может привести к различным числовым индексам.
Функция bcmod() больше не обрезает числа с плавающей точкой до целых. Таким образом, её поведение теперь соответствует fmod(), а не оператору %. Например, bcmod('4', '3.5') теперь возвращает 0.5 вместо 1.
Функции hash_hmac(), hash_hmac_file(),
hash_pbkdf2() и hash_init() (с
HASH_HMAC
) больше не принимают некриптографические хеши.
Опция функции json_decode(),
JSON_OBJECT_AS_ARRAY
, теперь используется, если второй параметр (assoc) равен NULL
. Ранее
JSON_OBJECT_AS_ARRAY
всегда игнорировался.
Числа, генерируемые rand() и mt_rand() для определённого параметра переинициализации (seed), могут отличаться от PHP 7.1 на 64-битных машинах (из-за исправления ошибки модульного смещения в реализации).
sql.safe_mode
Настройка конфигурации sql.safe_mode
была удалена.
Элемент массива zone, возвращаемого функцией date_parse_from_format() теперь отображает секунды вместо минут, а его знак инвертируется. Например, -120 теперь будет 7200.