Благодаря введению гибкого синтаксиса heredoc/nowdoc, doc-строки, содержащие закрывающие идентификаторы внутри своего тела, могут вызвать синтаксические ошибки или изменения в интерпретации. Пример:
<?php
$str = <<<FOO
abcdefg
   FOO
FOO;
?>FOO ранее не имел особого значения.
    Теперь он будет интерпретироваться как конец heredoc-строки
    и следующий FOO; приведёт к синтаксической ошибке.
    Эта проблема всегда может быть решена путём выбора закрывающего идентификатора,
    который не используется в содержимом строки.
   
  
    Выражения continue, используемые в структурах управления потока switch
    теперь будет выдавать предупреждение. В PHP такие выражения
    continue эквиваленты
    break, в то время, как в других языках они ведут себя как continue 2.
    
<?php
while ($foo) {
    switch ($bar) {
      case "baz":
         continue;
         // Предупреждение: "continue" эквивалентен
         //          "break". Возможно, вы имели в виду "continue 2"?
   }
}
?>
    Доступ к массиву типа $obj["123"],
    где $obj реализует интерфейс ArrayAccess,
    а "123" — целочисленный строковый литерал,
    больше не приведёт к неявному преобразованию в целое число,
    т. е. $obj->offsetGet("123") вместо $obj->offsetGet(123).
    Это соответствует существующему поведению для нелитеральных значений.
    Поведение массивов никак не изменилось, они продолжают неявно преобразовывать целые строковые ключи в целые числа.
   
В PHP статические свойства совместно используются наследующими классами, если статическое свойство явно не переопределено в дочернем классе. Однако из-за ошибки реализации можно было отделить статические свойства, присвоив их по ссылке. Эта лазейка была исправлена.
<?php
class Test
{
    public static $x = 0;
}
class Test2 extends Test { }
Test2::$x = &$x;
$x = 1;
var_dump(Test::$x, Test2::$x);
// Раньше:  int(0), int(1)
// Теперь: int(1), int(1)
?>Ссылки, возвращаемые доступом к массиву и свойству, теперь распаковываются как часть доступа. Это означает, что больше невозможно изменить ссылку между доступом и использованием доступного значения:
<?php
$arr = [1];
$ref =& $arr[0];
var_dump($arr[0] + ($arr[0] = 2));
// Раньше: int(4), Теперь: int(3)
?>Распаковка аргументов перестала работать со значением Traversable с нечисловыми ключами. Следующий код работает в PHP 5.6-7.2 по ошибке.
<?php
function foo(...$args)
{
    var_dump($args);
}
function gen()
{
    yield 1.23 => 123;
}
foo(...gen());
?>Утилиту ext_skel полностью переработали с новыми опциями, а некоторые старые опции удалили. Теперь она написана на PHP и не имеет внешних зависимостей.
Поддержка BeOS была прекращена.
    Исключения, выброшенные из-за автоматического преобразования предупреждений
    в исключения в режиме EH_THROW
    (например, некоторые исключения DateTime),
    больше не заполняют состояние error_get_last().
    Таким образом, они теперь работают так же, как вручную выброшенные исключения.
   
    Исключение TypeError теперь указывает на правильные типы
    int и bool вместо
    integer и boolean, соответственно.
   
Про неопределённые переменные, переданные в compact(), теперь будет сообщено уведомлением.
    Функция getimagesize() и связанные с ней функции теперь сообщают
    mime-типы изображений BMP как image/bmp вместо
    image/x-ms-bmp, поскольку первый зарегистрирован
    в IANA (смотрите » RFC 7903).
   
    Функция stream_socket_get_name() теперь возвращает адреса IPv6,
    заключённые в квадратные скобки. Например, будет возвращена строка "[::1]:1337"
    вместо "::1:1337".
   
Все предупреждения, выброшенные функциями BCMath, теперь используют обработку ошибок PHP. Раньше некоторые предупреждения были непосредственно отправлены в поток stderr.
Функции bcmul() и bcpow() теперь возвращают числа с запрошенным масштабом. Раньше возвращаемые числа могли опускать завершающие десятичные нули.
Логины rsh/ssh по умолчанию отключены. Используйте imap.enable_insecure_rsh, если вы хотите включить их. Обратите внимание, что библиотека IMAP не фильтрует имена почтовых ящиков перед передачей их команде rsh/ssh, таким образом, передача ненадёжных данных этой функции с включённым rsh/ssh небезопасна.
   Из-за дополнительной поддержки именованных фрагментов,
   паттерны mb_ereg_*() с использованием именованных фрагментов будут вести себя по-разному.
   В частности, именованные фрагменты будут частью совпадений, а функция mb_ereg_replace()
   будет интерпретировать дополнительный синтаксис. Смотрите Именованные
   фрагменты для получения дополнительной информации.
  
   Подготовленные запросы теперь правильно указывают на дробные секунды для столбцов
   DATETIME, TIME и
   TIMESTAMP с указателем десятичных знаков
   (например, TIMESTAMP(6)  при использовании микросекунд).
   Раньше часть дробных секунд была просто опущена из возвращаемых значений.
  
   Подготовленные запросы теперь правильно указывают на дробные секунды для столбцов
   DATETIME, TIME и
   TIMESTAMP со спецификатором десятичных знаков
   (например, TIMESTAMP(6) при использовании микросекунд).
   Ранее, дробная часть секунд была просто опущена из возвращаемых значений.
   Обратите внимание, что это влияет только на использование PDO_MYSQL с отключённой эмуляцией подготовленных запросов
   (например, с использованием нативной функциональности).
   Запросы, использующие соединения, у которых задана опция PDO::ATTR_EMULATE_PREPARES=true
   (значение по умолчанию), не были затронуты данным исправлением ошибки и уже получали корректные значения долей секунды от движка.
  
   Экспорт объектов Reflection в строку теперь использует
   int) и bool) вместо
   integer and boolean, соответственно.
  
Если автозагрузчик SPL выбрасывает исключение, последующие автозагрузчики не будут выполняться. Раньше все автозагрузчики выполнялись, а исключения объединялись в цепочку вызовов.
Математические операции, которые включают объекты SimpleXML, теперь будут обрабатывать текст как целое число (int) или число с плавающей точкой (float), в зависимости от того, что является более подходящим. Раньше значения обрабатывались как целые числа (integer) без каких-либо условий.
Начиная с PHP 7.3.23 имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.
