Novas Funcionalidades
PHP Core
Prefixo de Inteiro Literal Octal
Inteiros octais agora podem usar um prefixo
0o
/0O
explícito em inteiros literais,
similar à inteiros literais binários e hexadecimais.
<?php
014; // Literal octal não-prefixado
0o14; // Literal octal prefixado
?>
Desempacotamento de Array com chaves String
Adicionado suporte para desmontagem de arrays com chave string
<?php
$arr1 = [1, 'a' => 'b'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>
Argumentos Nomeados Após Desempacotamento de Argumentos
Agora é possível especificar argumentos nomeados após um desempacotamento de argumentos. ex. foo(...$args, nomeado: $arg).
Chave do Caminho Completo para Upload de Arquivos
Upload de arquivos agora fornece uma chave adicional full_path
,
que contém o caminho completo (em vez de apenas o nome base) do arquivo carregado.
Isso destina-se ao uso em conjunto com "upload webkitdirectory".
Enumerações
Suporte para Enumerações foi adicionado.
Fibers
Suporte para Fibers foi adicionado.
Sintaxe de Callable de Primeira Classe
Closures para callables agora podem ser criadas usando a sintaxe myFunc(...)
,
que é idêntica a Closure::fromCallable('myFunc')
.
Note: O
...
é parte da sintaxe, e não uma omissão.
Tipos de Intersecção
Suporte a tipos de intersecção foi adicionado.
Tipos de Intersecção não podem ser usados em conjunto com tipos de união
Tipo never
Um novo tipo never de retorno apenas foi adicionado. Isso indica que a função exit(), lança uma exceção, ou não termina.
new
em Inicializadores
Agora é possível usar expressões new ClassName()
como o
valor padrão de um parâmetro, variável estática, inicializadores de constante global,
e como argumentos de atributo.
Objetos também podem ser passados para define() agora.
Propriedades somente leitura
Suporte para propriedades readonly foi adicionado.
Constantes de classe finais
Adicionado suporte ao modificador final para constantes de classe. Além disso, as constantes de interface podem ser sobreescritas.
CURL
Adicionada a opção CURLOPT_DOH_URL
.
Adicionadas opções para certificado blob quando libcurl >= 7.71.0:
-
CURLOPT_ISSUERCERT_BLOB
-
CURLOPT_PROXY_ISSUERCERT
-
CURLOPT_PROXY_ISSUERCERT_BLOB
-
CURLOPT_PROXY_SSLCERT_BLOB
-
CURLOPT_PROXY_SSLKEY_BLOB
-
CURLOPT_SSLCERT_BLOB
-
CURLOPT_SSLKEY_BLOB
Adicionada CURLStringFile, que pode ser usada para postar um arquivo a partir de uma string em vez de um arquivo:
<?php
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>
FPM
Adicionado status de formato openmetrics. Ele pode ser usado pelo Prometheus para buscar métricas do FPM.
Adicionada nova opção de pool para o gerenciador de processo dinâmico chamada
pm.max_spawn_rate
. Ela permite iniciar uma séria de filhos
em um ritmo mais rápido quando pm dinâmico está selecionado.
O valor padrão é 32
que era o valor
codificado anterior.
GD
Suporte Avif agora está disponível através de imagecreatefromavif() e imageavif(), se a libgd foi compilada com suporte Avif.
Hash
As seguintes funções hash(),
hash_file(), e hash_init()
agora suportam um argumento opcional options
adicional, que pode ser utilizado para passar dados específicos do algoritmo.
MurmurHash3
Adicionado suporte a MurmurHash3
com porte A
streaming. As seguintes variantes estão implementadas:
- murmur3a, hash 32-bit
- murmur3c, hash 128-bit para x86
- murmur3f, hash 128-bit para x64
O estado de hash inicial pode ser passado através da chave seed
no array options
, por exemplo:
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
0
até o UINT_MAX
definido pela plataforma, geralmente
4294967295
.
xxHash
Adicionado suporte a xxHash
.
As seguintes variantes estão implementadas:
- xxh32, hash 32-bit
- xxh64, hash 64-bit
- xxh3, hash 64-bit
- xxh128, hash 128-bit
O estado inicial de hash pode ser passado através da chave seed
no array options
, por exemplo:
<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
secret
no array options
, também:
<?php
$h = hash("xxh3", $data, options: ["secret" => "Segredo de pelo menos 136 bytes aqui"]);
echo $h, "\n";
?>
MySQLi
Nova diretiva INI mysqli.local_infile_directory
A diretiva INI mysqli.local_infile_directory foi adicionada, que pode ser usada para especificar um diretório a partir do qual os arquivos podem ser carregados. Só é significativo se mysqli.allow_local_infile não estiver habilitada, já que todos os diretórios são permitidos nesse caso.
Ligar parâmetros no execute
Agora é possível ligar parâmetros passando-os como um array para o mysqli_stmt::execute(). Todos os valores serão ligados como strings. Apenas arrays de lista são permitidos. Essa nova funcionalidade não está disponível quando MySQLi é compilado com libmysqlclient.
<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>
Novo método mysqli_result::fetch_column()
mysqli_result::fetch_column()
foi adicionado para permitir buscar um único valor escalar do conjunto de resultados.
O novo método aceita um parâmetro opcional baseado em 0 column
do tipo int especificando de qual coluna buscar.
<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>
PDO
O atributo PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
foi adicionado, que pode ser usado para especificar um diretório no qual os
arquivos podem ser carregados.
É significante apenas se PDO::MYSQL_ATTR_LOCAL_INFILE
não estiver habilitada, já que todos os diretórios são permitidos nesse caso.
PDO_SQLite
A sintaxe DSN "file:"
do SQLite agora é suportada,
que permite especificar flags adicionais.
Essa funcionalidade não está disponível se open_basedir estiver definido.
<?php
new PDO('sqlite:file:caminho/para/sqlite.db?mode=ro')
?>
POSIX
Adicionadas POSIX_RLIMIT_KQUEUES
and POSIX_RLIMIT_NPTS
.
Esses rlimits estão disponíveis apenas no FreeBSD.
Standard
fputcsv() agora aceita um novo argumento
eol
que permite a definição de uma sequência de
fim de linha personalizada, o padrão continua o mesmo e é "\n"
.
SPL
SplFileObject::fputcsv() agora aceita um novo argumento
eol
que permite a definição de uma sequência de
fim de linha personalizada, o padrão continua o mesmo e é "\n"
.