Adicionado o operador pipe
(|>).
<?php
$result = "Olá, Mundo!" |> strlen(...);
print $result . PHP_EOL; // Exibe "11"Adicionado suporte a Closures e chamáveis de primeira classe em expressões constantes. Isto inclui:
Adicionado o atributo NoDiscard para indicar que um valor de retorno de uma função é importante e deve ser consumido.
Além disso, foi adicionada a conversão (void) para indicar a intenção de não se usar um valor.
A conversão (void) não tem efeito na execução do programa em si mas
pode ser usada para suprimir avisos emitidos por #[\NoDiscard] e possivelmente
também por diagnósticos emitidos por IDEs externos ou por ferramentas de análise estática.
<?php
#[\NoDiscard]
function concat(string $a, string $b): string {
return a + b;
}
// Warning: The return value of function concat() should either be used or
// intentionally ignored by casting it as (void) in xxx.php
concat("a", "b");
// Nenhum aviso porque o valor de retorno é consumido pela atribuição.
$results = concat("a", "b");
// Nenhum aviso porque a conversão (void) é usada.
(void)concat("a", "b");
Adicionado suporte a atributos em constantes que não sejam de classe no momento da compilação
(ex.: const MY_CONST = 1; em vez de
define('MY_CONST', 1);).
O atributo Deprecated agora pode ser usado em constantes.
#[\DelayedTargetValidation]O novo atributo DelayedTargetValidation pode ser usado para suprimir erros de compilação de atributos do núcleo (ou de extensão) que são usados em destinos inválidos. Estes erros são por sua vez reportados no momento da execução se e quando ReflectionAttribute::newInstance() for chamado.
#[\Override] para propriedadesO atributo Override agora pode ser aplicado a propriedades.
Adicionado o suporte a visibilidade assimétrica para propriedades estáticas.
Erros fatais (tal como um tempo de execução máximo excedido) agora incluem um rastreamento de pilha.
A promoção de propriedade de construtor agora pode ser usada para propriedades finais.
Adicionado suporte para conversões em expressões constantes.
<?php
const T1 = (int) 0.3; // Anteriormente: "Fatal error: Constant expression contains invalid operations"
print T1 . PHP_EOL; // Exibe "0"A construção de linguagem 'clone' agora é uma função e suporta reatribuição de propriedades (somente-leitura) durante a clonagem através do novo parâmetro $withProperties.
Adicionado suporte para identificador compartilhado que persistem por múltiplas requisições PHP, permitindo reúso mais efetivo de conexões de forma segura.
Adicionado suporte a CURLINFO_USED_PROXY (libcurl >= 8.7.0),
CURLINFO_HTTPAUTH_USED
e CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0)
para a função curl_getinfo().
Quando curl_getinfo() retorna um array, a mesma informação
fica disponível nas chaves "used_proxy",
"httpauth_used" e
"proxyauth_used".
CURLINFO_USED_PROXY é definida para zero se nenhum proxy foi usado na
transferência anterior ou para um valor diferente de zero se um proxy foi usado.
CURLINFO_HTTPAUTH_USED e
CURLINFO_PROXYAUTH_USED recebem máscaras de bits
indicando os métodos de autenticação HTTP e proxy que foram
usados na requisição anterior.
Consulte as constantes CURLAUTH_* para
os valores possíveis.
Adicionado suporte à opção cURL CURLOPT_INFILESIZE_LARGE, que é uma substituta segura
para CURLOPT_INFILESIZE. Em certos sistemas,
CURLOPT_INFILESIZE aceita somente um inteiro de 32 bits com sinal para indicar
o tamanho do arquivo (2.0 GiB) mesmo em sistemas de 64 bits.
CURLOPT_INFILESIZE_LARGE aceita o maior valor inteiro
que o sistema permitir.
Adicionadas os valores CURLFOLLOW_OBEYCODE,
CURLFOLLOW_FIRSTONLY e CURLFOLLOW_ALL
para a opção CURLOPT_FOLLOWLOCATION da função
curl_setopt().
CURLFOLLOW_OBEYCODE passa a seguir mais rigorosamente em relação ao
redirecionamento, se permitido.
CURLFOLLOW_FIRSTONLY segue apenas o primeiro redirecionamento, portanto
se houver algum redirecionamento subsequente, ela não irá além disso.
CURLFOLLOW_ALL é equivalente a definir
CURLOPT_FOLLOWLOCATION para 'true'.
Adicionado suporte à constante CURLINFO_CONN_ID (libcurl >= 8.2.0)
para a função curl_getinfo(). Esta constante permite recuperar
o ID exclusivo da conexão usada por uma transferência cURL. É principalmente
útil quando a reutilização de conexões ou a lógica de agrupamento de conexões é necessária em
aplicações de nível PHP. Quando curl_getinfo() retorna um array,
esse valor está disponível como a chave "conn_id".
Adicionado suporte à constante CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0)
para a função curl_getinfo(). Esta constante permite
recuperar o tempo (em microssegundos) que a requisição passou na fila
de conexões do libcurl antes de ser enviada.
Este valor também pode ser obtido passando
CURLINFO_QUEUE_TIME_T para o parâmetro
option da função curl_getinfo().
Adicionado suporte à constante CURLOPT_SSL_SIGNATURE_ALGORITHMS para
especificar os algoritmos de assinatura a serem usados para TLS.
Adicionada a propriedade Dom\Element::$outerHTML.
Adicionada a propriedade $children às implementações Dom\ParentNode.
Adicionado suporte às etiquetas Exif OffsetTime*.
Adicionado suporte para HEIF/HEIC.
Adicionada a nova opção FILTER_THROW_ON_FAILURE que pode ser
passada para as funções de filtro e forçará o lançamento de uma exceção
quando a validação falhar.
A nova opção não pode ser combinada com
FILTER_NULL_ON_FAILURE; tentar fazer isso resultará
no lançamento de um ValueError.
Adicionadas as constantes de classe NumberFormatter::CURRENCY_ISO,
NumberFormatter::CURRENCY_PLURAL,
NumberFormatter::CASH_CURRENCY
e NumberFormatter::CURRENCY_STANDARD
para varios formatos de números relacionados a moeda.
Adicionados os métodos Locale::addLikelySubtags() e Locale::minimizeSubtags() para lidar com possíveis etiquetas em uma dada localidade.
Adicionada a classe IntlListFormatter para formatar, ordenar e
pontuar uma lista de itens com uma dada localidade; operandos
IntlListFormatter::TYPE_AND,
IntlListFormatter::TYPE_OR,
IntlListFormatter::TYPE_UNITS; e larguras
IntlListFormatter::WIDTH_WIDE,
IntlListFormatter::WIDTH_SHORT e
IntlListFormatter::WIDTH_NARROW.
É suportado a partir da ICU 67.
Adicionada a constante de classe Pdo\Sqlite::ATTR_BUSY_STATEMENT.
Adicionadas as constantes de classe Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT,
Pdo\Sqlite::EXPLAIN_MODE_PREPARED,
Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN,
Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN.
Adicionado o atributo de conexão Pdo\Sqlite::ATTR_TRANSACTION_MODE
com valores possíveis de Pdo\Sqlite::TRANSACTION_MODE_DEFERRED,
Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE
e Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE,
permitindo configurar a o modo de transação a ser usado por beginTransaction().
session_set_cookie_params(),
session_get_cookie_params()
e session_start() agora suportam cookies particionados através da chave
"partitioned".
Os casos de enumeração agora são despejados em SoapClient::__getTypes().
Adicionado suporte para o atributo xml:lang do "Reason Text" do SOAP 1.2.
As assinaturas de SoapFault::__construct() e
SoapServer::fault() agora possuem um
parâmetro opcional $lang.
Esse suporte resolve a compatibilidade com clientes SOAP do .NET.
A função mail() agora retorna o erro real do sendmail e detecta se o processo do sendmail foi encerrado inesperadamente. Nesses casos, um aviso é emitido e a função retorna 'false'. Anteriormente, esses erros eram ignorados silenciosamente. Essa alteração afeta apenas o transporte do sendmail.
getimagesize() agora suporta imagens HEIF/HEIC.
getimagesize() agora suporta imagens SVG quando a extensão libxml também estiver carregada. De forma similar, image_type_to_extension() e image_type_to_mime_type() agora também suportam IMAGETYPE_SVG.
O array retornado por getimagesize() agora possui duas entradas adicionais:
"width_unit" e "height_unit" para indicar em
quais unidades as dimensões são expressas. Essas unidades são px por padrão. Elas não são
necessariamente as mesmas (apenas para dar um exemplo: uma pode ser cm e a outra pode ser px).
setcookie() e setrawcookie() agora suportam a chave
"partitioned".
Uma extensão URI sempre habilitada foi adicionada e pode ser usada para lidar com URIs e URLs de acordo com a RFC 3986 e a WHATWG URL.
O argumento $namespace de XSLTProcessor::getParameter(),
XSLTProcessor::setParameter() e
XSLTProcessor::removeParameter() agora funciona de fato
em vez de ser tratado como vazio.
Isso só funciona se o argumento $name não usar a notação Clark e não for um
QName, pois nesses casos o namespace é obtido do 'href' do namespace ou
do prefixo, respectivamente.
flock() agora é compatível com fluxos zlib. Anteriormente, isso sempre falhava ao executar qualquer ação de bloqueio.