Alterações incompatíveis com versões anteriores
A função number_format() não retorna mais o valor zero negativo
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)); // now outputs string(1) "0" instead of string(2) "-0"
Converte chaves numéricas durante conversões de objetos e arrays
Chaves númericas agora são melhor manipuladas ao converter arrays para objetos e objetos para arrays (conversão explícita ou pela função settype()).
Isto siginifica que chaves de números inteiros (ou de strings numéricas) de arrays sendo convertidos para objetos agora são acessíveis:
<?php
// array to object
$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 invés 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
// object to 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, ao invés de string int(1) } int(1) int(1)
Não é permitido passar 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.
Alerta ao contar tipos não contáveis
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)
ext/hash foi movido de recurso para objeto
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()).
Melhoria nos padrões SSL/TLS
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 paratls://
-
Constantes
STREAM_CRYPTO_METHOD_TLS_*
têm os padrões TLSv1.0 ou TLSv1.1 + TLSv1.2, ao invés de somente TLSv1.0
Valor de retorno de gettype() em recursos fechados
Anteriormente, usar gettype() em um recurso fechado
retornaria uma string "unknown type"
. Agora, uma string
"resource (closed)"
será retornada.
is_object() e __PHP_Incomplete_Class
Anteriormente, usar is_object() na classe
__PHP_Incomplete_Class retornaria false
.
Agora, true
será retornado.
Promoção do nível de erro de constantes indefinidas
Referências não qualificadas a constantes indefinidas agora irão gerar um
E_WARNING
(ao invés de um E_NOTICE
).
Não próxima versão maior do PHP, elas irão gerar exceções
Error.
Suporte ao Windows
As versões mínimas do Windows oficialmente suportadas são agora Windows 7 e Windows Server 2008 R2.
Verificações nos valores padrões de propriedades de traits
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 reservados, e é proibido usá-lo como nome de classe, trait
ou interface.
Suporte a NetWare
O suporte a NetWare agora foi removido.
array_unique() com SORT_STRING
Enquanto array_unique() com SORT_STRING
anteriormente copiava o array e removia elementos não únicos (sem empactotar
o array depois), agora o novo array é construído com a adição dos
elementos únicos. Isto pode resultar em índices numéricos diferentes.
Alterações em bcmod() com números do tipo float
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
.
Funções de hash e hashes não criptográficos
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.
Opções da função json_decode()
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.
Saída de rand() e mt_rand()
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).
Remoção da condifuração ini sql.safe_mode
A configuração ini sql.safe_mode
agora foi removida.
Alterações nas funções date_parse() e date_parse_from_format()
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
.
Cookies Recebidos
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.