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"]=> 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]=> 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.