Alterações incompatíveis com versões anteriores
 
  Núcleo do PHP
  
   Acesso em estilo de array em não-array
   
    Tentar usar valores do tipo null, bool,
    int, float ou resource como um
    array (como $null["key"]) agora irá gerar um aviso.
   
   
  
  
   Palavra-chave fn
   
    fn agora é uma palavra-chave reservada. Em particular,
    ele não pode mais ser usado como um nome de função ou classe.
    Ela ainda pode ser usado como um nome constante de método ou classe.
   
   
  
   A tag <?php no final do arquivo
   
    <?php no final do arquivo (sem seguir a nova linha)
    agora será interpretado como uma tag PHP de abertura. Antes, era interpretada
    como uma short open tag seguida por um literal php e
    resultava em um erro de sintaxe (com short_open_tag=1)
    ou era interpretada como uma string literal <?php
    (com short_open_tag=0).
   
   
  
  
   Serialização
   
    O formato o de serialização foi removido.
    Como nunca é produzido pelo PHP, isso pode apenas interromper a desserialização de
    strings criadas manualmente.
   
   
  
   Constantes do algoritmo de senha
   
    Os identificadores do algoritmo de hash de senha agora são sequências anuláveis
    em vez de números inteiros.
   
   
   
    Aplicações que usam corretamente as constantes PASSWORD_DEFAULT,
    PASSWORD_BCRYPT, PASSWORD_ARGON2I e PASSWORD_ARGON2ID continuarão
    funcionando corretamente.
   
   
  
   
   
    htmlentities() agora emitirá um aviso
    (em vez de um aviso estrito sobre os padrões) se for usado com
    uma codificação para a qual apenas a substituição básica de entidade é suportada;
    nesse caso, é equivalente ahtmlspecialchars().
   
   
  
   
   
    fread() e fwrite() agora retornarão
    false se a operação falhar.
    Antes uma string vazia ou 0 era retornado.
    EAGAIN/EWOULDBLOCK não são considerados falhas.
   
   
    Essas funções agora também emitem um aviso de falha,
    como ao tentar gravar em um recurso de arquivo somente leitura.
   
   
  
 
  Funções matemáticas de precisão arbitrária BCMath
  
   As funções BCMath agora avisam se um número não bem formado é passado, como
   "32foo". O argumento será interpretado como zero, como antes.
  
  
 
  CURL
  
   Tentar serializar uma classe CURLFile agora irá
   gerar uma exceção. Antes, a exceção era lançada apenas na desserialização.
  
  
   O uso de CURLPIPE_HTTP1 está descontinuado, e não é mais
   suportado a partir do cURL 7.62.0.
  
  
   O parâmetro $version de curl_version()
   está descontinuado. Se qualquer valor diferente do padrão CURLVERSION_NOW
   for passado, um aviso será gerado e o parâmetro será ignorado.
  
  
 
  Data e hora
  
   Chamar a função var_dump() ou similar em uma instância de
   DateTime ou DateTimeImmutable
   não deixará mais propriedades acessíveis no objeto.
  
  
   A comparação de objetos DateInterval
   (usando ==, <, e assim por diante) agora gera um aviso
   e sempre retorna false. Antes todos os objetos DateInterval
   eram considerados iguais, a menos que tivessem propriedades.
  
  
 
 
  MySQLi
  
   A funcionalidade do servidor incorporado foi removida. Foi quebrado desde
   pelo menos o PHP 7.0.
  
  
   A propriedade não documentada mysqli::$stat foi removida
   em favor de mysqli::stat().
  
  
 
  OpenSSL
  
   A função openssl_random_pseudo_bytes() agora
   lançará uma exceção em situações de erro, semelhante a random_bytes().
   Em particular, um Error será lançado se o número de
   bytes solicitados for menor ou igual a zero, e uma Exception
   será lançada se não for possível reunir aleatoriedade suficiente.
   É garantido que o argumento de saída $crypto_strong será sempre
   true se a função não lançar exceção, portanto, uma verificação explícita não é necessário.
  
  
 
  Expressões regulares (Compatíveis com Perl)
  
   Quando o modo PREG_UNMATCHED_AS_NULL é usado,
   os grupos de captura sem correspondência à direita agora também serão definidos como null (ou
   [null, -1] se a captura deslocada estiver habilitada).
   Isso significa que o tamanho de $matches sempre será o mesmo.
  
  
 
  Objetos de dados PHP
  
   A tentativa de serializar uma instância PDO ou
   PDOStatement agora gerará
   uma Exception em vez de uma PDOException,
   consistente com outras classes internas que não oferecem suporte à serialização.
  
  
 
  Reflection
  
   Os objetos reflexion agora gerarão uma exceção se for feita
   uma tentativa de serializá-los. A serialização de objetos reflexion nunca
   foi suportada e resultou em objetos reflexions corrompidos. Foi explicitamente
   proibido agora.
  
  
   Os valores para as constantes das classes ReflectionClassConstant,
   ReflectionMethod e ReflectionProperty
   mudaram.
  
  
 
 
 
  Incoming Cookies
  
   A partir do PHP 7.4.11, os nomes dos cookies recebidos não
    são mais decodificados em url por razões de segurança.