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"
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)
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
).
Não 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 reservados, 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 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.
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.