Novos Recursos
Núcleo do PHP
Propriedades tipadas
As propriedades de classe agora suportam declarações de tipo.
O exemplo acima reforçará que
$user->id pode ser atribuído apenas
com valores
int e
$user->name
somente com valores de
string.
Funções de Seta
Funções de seta fornecem uma
sintaxe abreviada para definir funções
com ligação implícita por valor de escopo.
Covariância do tipo de retorno limitado e contravariância do tipo de argumento
O código a seguir agora funcionará:
O suporte completo à variação só está disponível se o carregamento automático for usado. Dentro de
um único arquivo, apenas as referências de tipo não cíclico são possíveis, porque todas
as classes precisam estar disponíveis antes de serem referenciadas.
Operador de atribuição de coalescência nula
Descompactando dentro de arrays
Separador literal numérico
Literais numéricos podem conter underscores entre dígitos.
Referências fracas
Referências fracas permitem que o programador mantenha uma referência a um objeto
que não impede que o objeto seja destruído.
Permitir exceções de __toString()
Lançar exceções de __toString()
agora é permitido. Antes isto resultava um erro fatal. Os erros fatais
recuperáveis existentes nas conversões de string foram convertidos
em exceções de Error.
CURL
CURLFile agora suporta empacotadores de fluxo,
além de nomes de arquivos simples, se a extensão tiver sido criada com relação à libcurl >= 7.56.0.
FFI
FFI é uma nova extensão, que fornece uma maneira simples de chamar
funções nativas, acessar variáveis nativas e criar/acessar
estruturas de dados definidas nas bibliotecas C.
GD
Adicionado o filtro de imagem IMG_FILTER_SCATTER
para aplicar um filtro de dispersão às imagens.
Hash
Adicionado o hash crc32c usando o polinômio de Castagnoli.
Essa variante CRC32 é usada por sistemas de armazenamento, como
iSCSI, SCTP, Btrfs e ext4.
Multibyte String
Adicionada a função mb_str_split(), que fornece
a mesma funcionalidade que str_split(), mas operando
em pontos de código em vez de bytes.
PDO
O nome de usuário e a senha agora podem ser especificados como parte do PDO DSN para
os drivers mysql, mssql, sybase, dblib, firebird e oci. Antes, isso
era suportado apenas pelo driver pgsql. Se um nome de usuário/senha for especificado
no construtor e no DSN, o construtor terá precedência.
Agora é possível escapar pontos de interrogação nas consultas SQL para evitar que
elas sejam interpretadas como espaços reservados para parâmetros. Escrever ??
permite enviar um único ponto de interrogação para o banco de dados e por exemplo, usar o
operador PostgreSQL JSON 'key exists' (?).
PDO_SQLite
PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)
permite verificar se a instrução é somente leitura, ou seja, se não modifica
o banco de dados.
PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true)
permite o uso de códigos de resultado estendidos do SQLite3 em PDO::errorInfo()
e PDOStatement::errorInfo().
SQLite3
Adicionado SQLite3::lastExtendedErrorCode()
para buscar o último código de resultado estendido.
Adicionado SQLite3::enableExtendedResultCodes($enable = true),
que fará SQLite3::lastErrorCode()
retornar códigos de resultado estendidos.
Standard
Serialização de objetos personalizados
Um novo mecanismo para serialização de objetos personalizados foi adicionado,
que usa dois novos métodos mágicos: __serialize
e __unserialize.
O novo mecanismo de serialização substitui a interface
Serializable,
que será descontinuada no futuro.
Funções de mesclagem de array sem argumentos
array_merge() e array_merge_recursive()
agora podem ser chamados sem nenhum argumento; nesse caso, eles retornarão um array vazio.
Isso é útil em conjunto com o operador de espalhamento (spread operator), por exemplo, array_merge(...$arrays).
proc_open() agora aceita um array em vez de
uma string para o comando. Nesse caso, o processo será aberto
diretamente (sem passar por um shell) e o PHP cuidará de
qualquer argumento necessário para escapar.
proc_open() agora suporta
redirect e descritores null.
argon2i(d) sem libargon
password_hash() agora possui as implementações argon2i e argon2id
da extensão sodium quando o PHP é compilado sem libargon.