Devido à introdução da sintaxe flexível heredoc/nowdoc, doc string que contém o rótulo final dentro de seu corpo pode causar erros de sintaxe ou alteração na interpretação. Por exemplo em:
<?php
$str = <<<FOO
abcdefg
   FOO
FOO;
?>FOO não tinha anteriormente nenhum
    significado especial. Agora será interpretado como o final da string heredoc
    e o seguinte FOO; causará um erro de sintaxe. Esse problema sempre
    pode ser resolvido escolhendo um rótulo final que não ocorra
    no conteúdo da string.
   
  
    As instruções continue direcionadas às estruturas de fluxo de controle do switch
    agora gerarão um aviso. Em PHP, tais instruções
    continue são equivalentes a
    break, enquanto se comportam como continue 2
    em outras linguagens.
    
<?php
while ($foo) {
    switch ($bar) {
      case "baz":
         continue;
         // Warning: "continue" targeting switch is equivalent to
         //          "break". Did you mean to use "continue 2"?
   }
}
?>
    Acessos de array do tipo $obj["123"], onde
    $obj implementa ArrayAccess e
    "123"" é uma string literal de inteiro não
    resultará mais em uma conversão implícita para inteiro, ou seja,
    $obj->offsetGet("123") será chamado em vez de
    $obj->offsetGet(123). Isso corresponde ao comportamento existente
    para não literais. O comportamento dos arrays não é afetado de forma alguma, eles
    continuam a converter implicitamente chaves de string integrais em inteiros.
   
No PHP, as propriedades estáticas são compartilhadas entre as classes herdadas, a menos que a propriedade estática seja explicitamente substituída em uma classe filha. Porém, devido a um artefato de implementação foi possível separar as propriedades estáticas atribuindo uma referência. Essa brecha foi corrigida.
<?php
class Test {
    public static $x = 0;
}
class Test2 extends Test { }
Test2::$x = &$x;
$x = 1;
var_dump(Test::$x, Test2::$x);
// Antes:      int(0), int(1)
// Agora:      int(1), int(1)
?>As referências retornadas por acessos de array e propriedade agora são desempacotadas como parte do acesso. Isso significa que não é mais possível modificar a referência entre o acesso e o uso do valor acessado:
<?php
$arr = [1];
$ref =& $arr[0];
var_dump($arr[0] + ($arr[0] = 2));
// Antes: int(4), Agora: int(3)
?>A descompactação de argumentos parou de funcionar com Traversables com chaves não inteiras. O código a seguir funcionou no PHP 5.6-7.2 por acidente.
<?php
function foo(...$args) {
    var_dump($args);
}
function gen() {
    yield 1.23 => 123;
}
foo(...gen());
?>O utilitário ext_skel foi completamente redesenhado com novas opções e algumas opções antigas removidas. Isso agora é escrito em PHP e não possui dependências externas.
O suporte para BeOS foi descartado.
    Exceções lançadas devido à conversão automática de avisos em exceções no modo
    EH_THROW (por exemplo, algumas exceções DateTime)
    não preenchem mais o estado error_get_last(). Dessa forma,
    eles agora funcionam da mesma maneira que as exceções lançadas manualmente.
   
    TypeError agora relata tipos errados como
    int e bool em vez de
    integer e boolean, respectivamente.
   
As variáveis indefinidas passadas para compact() agora serão relatadas como um aviso.
    getimagesize() e funções relacionadas agora relatam o tipo mime
    de imagens BMP como image/bmp em vez de
    image/x-ms-bmp, já que o primeiro foi registrado
    na IANA (consulte » RFC 7903).
   
    stream_socket_get_name() agora retornará endereços IPv6
    entre colchetes. Por exemplo, "[::1]:1337" será
    retornado em vez de "::1:1337".
   
Todos os avisos lançados pelas funções BCMath agora estão usando o tratamento de erros do PHP. Anteriormente, alguns avisos eram gravados diretamente no stderr.
bcmul() e bcpow() agora retornam números com a escala solicitada. Anteriormente, os números retornados podem ter omitido zeros decimais à direita.
Os logins rsh/ssh são desabilitados por padrão. Use imap.enable_insecure_rsh se quiser ativá-los. Observe que a biblioteca IMAP não filtra os nomes das caixas de correio antes de passá-los para o comando rsh/ssh, portanto, passar dados não confiáveis para essa função com rsh/ssh ativado é inseguro.
    Devido ao suporte adicional para capturas nomeadas, os padrões mb_ereg_*()
    usando capturas nomeadas se comportarão de maneira diferente. Em particular, as capturas
    nomeadas farão parte das correspondências e mb_ereg_replace()
    interpretará a sintaxe adicional. Consulte Capturas
    nomeadas para obter mais informações.
  
   As instruções preparadas agora relatam corretamente os segundos fracionários para as colunas
   DATETIME, TIME e
   TIMESTAMP com especificador de decimais (por exemplo,
   TIMESTAMP(6) ao usar microssegundos). Anteriormente, a
   parte dos segundos fracionários era simplesmente omitida dos valores retornados.
  
   As instruções preparadas agora relatam corretamente os segundos fracionários para as colunas
   DATETIME, TIME e
   TIMESTAMP com especificador de decimais (por exemplo,
   TIMESTAMP(6) ao usar microssegundos). Anteriormente, a
   parte dos segundos fracionários era simplesmente omitida dos valores retornados. Observe que
   isso afeta apenas o uso de PDO_MYSQL com preparações emuladas desativadas
   (por exemplo, usando a funcionalidade de preparação nativa). Declarações usando
   conexões com PDO::ATTR_EMULATE_PREPARES=true
   (que é o padrão) não foram afetadas pelo bug corrigido e já obtiveram os
   valores de segundos fracionários apropriados do mecanismo.
  
   A exportação de Reflection para string agora usa
   int e bool em vez de
   integer e boolean, respectivamente.
  
Se um autoloader SPL lançar uma exceção, os seguintes autoloaders não serão executados. Anteriormente, todos os autoloaders eram executados e as exceções eram encadeadas.
Operações matemáticas envolvendo objetos SimpleXML agora tratarão o texto como um int ou float, o que for mais apropriado. Anteriormente, os valores eram tratados como ints incondicionalmente.
A partir do PHP 7.3.23, os nomes dos cookies recebidos não são mais decodificados por url por motivos de segurança.
