Раньше функция 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().
В значения по умолчанию внесли следующие изменения:
tls:// теперь по умолчанию используется TLSv1.0 или TLSv1.1 или TLSv1.2
    
   ssl:// псевдоним tls://
    
   STREAM_CRYPTO_METHOD_TLS_* по умолчанию равны TLSv1.0
     или TLSv1.1 + TLSv1.2, вместо TLSv1.0
    
   
   Раньше вызов функции 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 для имён классов
   Имя object раньше было мягко зарезервировано с PHP 7.0.
   Теперь оно полноценное зарезервированное слово,
   которое запрещает использовать его как имя класса, трейта или интерфейса.
  
Удалили поддержку NetWare.
SORT_STRING
  
   Хотя функция array_unique() с флагом SORT_STRING
   раньше копировала массив и удаляла неуникальные элементы (без последующей упаковки массива),
   теперь новый массив создаётся путём добавления
   уникальных элементов. Это может привести к получению разных числовых индексов.
  
   Функция bcmod() больше не обрезает числа с плавающей точкой до целых.
   Таким образом, её поведение теперь соответствует функции
   fmod(), а не оператору %.
   Например, bcmod('4', '3.5') теперь возвращает
   значение 0.5, а не 1.
  
   Функции hash_hmac(), hash_hmac_file(),
   hash_pbkdf2() и hash_init() (с
   флагом HASH_HMAC) больше не принимают некриптографические хеши.
  
   Теперь используется опция JSON_OBJECT_AS_ARRAY функции json_decode(),
   если второй параметр (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()
   и date_parse(), теперь отображает секунды вместо
   минут, а его знак инвертируется. Например, значение -120
   теперь будет значением 7200.
  
Начиная с PHP 7.2.34 имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.
