Anteriormente, era possível que a função number_format()
   retornasse -0. Apesar de isto ser perfeitamente válido
   de acordo com a especificação de ponto flutuante IEEE 754, esta particularidade não
   era desejável para mostrar números formatados de uma forma legível.
  
<?php
var_dump(number_format(-0.01)); // agora exibe string(1) "0" em vez de string(2) "-0"Chaves numéricas agora são melhor manipuladas ao converter arrays para objetos e objetos para arrays (conversão explícita ou pela função settype()).
Isto significa que chaves de números inteiros (ou de strings numéricas) de arrays sendo convertidos para objetos agora são acessíveis:
<?php
// array para objeto
$arr = [0 => 1];
$obj = (object) $arr;
var_dump(
    $obj,
    $obj->{'0'}, // agora acessível
    $obj->{0} // agora acessível
);O exemplo acima produzirá:
object(stdClass)#1 (1) {
  ["0"]=>    // agora chave string, ao em vez de número inteiro
  int(1)
}
int(1)
int(1)
E chaves de números inteiros (ou de strings numéricas) de objetos sendo convertidos para arrays agora são acessíveis:
<?php
// objeto para array
$obj = new class {
    public function __construct()
    {
        $this->{0} = 1;
    }
};
$arr = (array) $obj;
var_dump(
    $arr,
    $arr[0], // agora acessível
    $arr['0'] // agora acessível
);O exemplo acima produzirá:
array(1) {
  [0]=>    // agora chave de número inteiro, em vez de string
  int(1)
}
int(1)
int(1)
null para get_class()
   Anteriormente, passar null para a função get_class()
   mostraria o nome da classe de onde a função foi chamada. Este comportamento agora foi
   removido, e um alerta E_WARNING será emitido. Para
   obter o mesmo comportamento anterior, o argumento deve simplesmente ser omitido.
  
   Um alerta E_WARNING agora será emitido ao se tentar usar a função
   count() em tipos não contáveis (isto inclui o apelido
   sizeof()).
  
<?php
var_dump(
    count(null), // NULL não é contável
    count(1), // inteiros não são contáveis
    count('abc'), // strings não são contáveis
    count(new stdClass), // objetos que não implementam a interface Countable não são contáveis
    count([1,2]) // arrays são contáveis
);O exemplo acima produzirá:
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)
Como parte da migração de longo prazo, a extensão Hash foi atualizada para utilizar objetos ao invés de recursos. A alteração deve ser transparente para desenvolvedores PHP, exceto onde houver a função is_resource() (que precisará ser atualizado para is_object()).
As seguinte alterações aos padrões foram feitas:
tls:// agora tem os padrões TLSv1.0 ou TLSv1.1 ou TLSv1.2
    
   ssl:// é um apelido para tls://
    
   STREAM_CRYPTO_METHOD_TLS_* têm os padrões TLSv1.0
     ou TLSv1.1 + TLSv1.2, ao invés de somente TLSv1.0
    
   
   Anteriormente, usar gettype() em um recurso fechado
   retornaria uma string "unknown type". Agora, uma string
   "resource (closed)" será retornada.
  
   Anteriormente, usar is_object() na classe
   __PHP_Incomplete_Class retornaria false.
   Agora, true será retornado.
  
   Referências não qualificadas a constantes indefinidas agora irão gerar um
   E_WARNING (ao invés de um E_NOTICE).
   Na próxima versão maior do PHP, elas irão gerar exceções
   Error.
  
As versões mínimas do Windows oficialmente suportadas são agora Windows 7 e Windows Server 2008 R2.
Verificações de compatibilidade em valores padrões de propriedades de traits não irão mais realizar conversões.
object para nomes de classe
   O nome object era fracamente reservado no PHP 7.0.
   Agora é estritamente reservado, e é proibido usá-lo como nome de classe, trait
   ou interface.
  
O suporte a NetWare agora foi removido.
SORT_STRING
   Enquanto array_unique() com SORT_STRING
   anteriormente copiava o array e removia elementos não únicos (sem empacotar
   o array depois), agora o novo array é construído com a adição dos
   elementos únicos. Isto pode resultar em índices numéricos diferentes.
  
   A função bcmod() não trunca mais números
   fracionários para inteiros. Assim sendo, seu comportamento agora segue o da função
   fmod(), ao invés do operador %.
   Por exemplo, bcmod('4', '3.5') agora retorna
   0.5 ao invés de 1.
  
   As funções hash_hmac(), hash_hmac_file(),
   hash_pbkdf2() e hash_init() (com
   HASH_HMAC) não aceitam mais hashes
   não criptográficas.
  
   A opção da função json_decode(),
   JSON_OBJECT_AS_ARRAY, agora é usada se o segundo
   parâmetro (assoc) for null. Anteriormente,
   JSON_OBJECT_AS_ARRAY era sempre ignorado.
  
Sequências geradas por rand() e mt_rand() para uma semente específica podem ser diferentes do PHP 7.1 em máquinas de 64 bits (devido à correção de um problema de polarização de resto de divisão na implementação).
sql.safe_mode
   A configuração ini sql.safe_mode agora foi removida.
  
   O elemento zone do array retornado pelas funções date_parse() e
   date_parse_from_format() representa segundos ao invés de
   minutos agora, e seu sinal está invertido. Por exemplo, -120
   é agora 7200.
  
A partir do PHP 7.2.34, os nomes de cookies recebidos não são mais decodificados como url por questões de segurança.
