O marcador de fechamento para strings doc não precisa mais ser seguido por ponto-e-vírgula ou nova linha. Além disso, o marcador de fechamento pode ser recuado, caso em que o recuo será retirado de todas as linhas na string do documento.
A desestruturação de matriz agora suporta atribuições de referência usando a sintaxe [&$a, [$b, &$c]] = $d
O mesmo também é suportado para list().
instanceof
agora permite literais como o primeiro operando, caso em que o resultado é sempre false
.
Uma nova exceção CompileError foi adicionada, da qual ParseError herda. Um pequeno número de erros de compilação agora lançará um CompileError em vez de gerar um fatal error. Atualmente, isso afeta apenas erros de compilação que podem ser lançados por token_get_all() no modo TOKEN_PARSE
, mas mais erros podem ser convertidos no futuro.
Agora são permitidas vírgulas à direita em chamadas de função e método.
O argumento de configuração --with-password-argon2[=dir] agora fornece suporte para os hashes Argon2i e Argon2id nas funções password_hash(), password_verify(), password_get_info() e password_needs_rehash(). As senhas podem ser hash e verificadas usando a constante PASSWORD_ARGON2ID
. O suporte para Argon2i e Argon2id nas funções password_*() agora requer que o PHP seja vinculado à biblioteca de referência libargon2 ≥ 20161029.
Novas opções foram adicionadas para personalizar o log do FPM:
log_limit
log_buffering
decorate_workers_output
catch_workers_output
estiver ativado. bcscale() agora também pode ser usado como getter para recuperar a escala atual em uso.
Suporte completo para controles LDAP foi adicionado às funções de consulta LDAP e ldap_parse_result():
$controls
para enviar controles para o servidor em ldap_add(), ldap_mod_replace(), ldap_mod_add(), ldap_mod_del(), ldap_rename(), ldap_compare(), ldap_delete(), ldap_modify_batch(), ldap_search(), ldap_list() e ldap_read() foi adicionado. $controls
para obter controles do servidor em ldap_parse_result() foi adicionado. LDAP_OPT_SERVER_CONTROLS
e LDAP_OPT_CLIENT_CONTROLS
em ldap_get_option() e ldap_set_option() foi corrigido. Foi adicionado suporte para mapeamento completo de case-mapping e case-folding. Ao contrário do case-mapping simples, o case-mapping completo pode alterar o comprimento da string. Por exemplo:
<?php
mb_strtoupper("Straße");
// Produces STRAßE on PHP 7.2
// Produces STRASSE on PHP 7.3
?>
MB_CASE_LOWER
(usado por mb_strtolower()) MB_CASE_UPPER
(usado por mb_strtoupper()) MB_CASE_TITLE
MB_CASE_FOLD
MB_CASE_LOWER_SIMPLE
MB_CASE_UPPER_SIMPLE
MB_CASE_TITLE_SIMPLE
MB_CASE_FOLD_SIMPLE
(usado por operações Case-Insensitive) As operações de string que não diferenciam maiúsculas de minúsculas agora usam case-folding em vez de case- mapping durante as comparações. Isso significa que mais caracteres serão considerados (sem distinção entre maiúsculas e minúsculas) iguais agora.
mb_convert_case() com MB_CASE_TITLE
agora executa conversão de maiúsculas e minúsculas com base nas propriedades Unicode derivadas de Cased e CaseIgnorable. Em particular, isso também melhora o tratamento de aspas e apóstrofos.
As tabelas de dados Multibyte String foram atualizadas para Unicode 11.
As funções Multibyte String Functions agora suportam corretamente strings maiores que 2 GB.
O desempenho da extensão Multibyte String foi significativamente melhorado em todos os aspectos. As maiores melhorias estão nas funções de conversão de caso.
As funções mb_ereg_*
agora suportam capturas nomeadas. Funções de correspondência como mb_ereg() agora retornarão capturas nomeadas usando o número do grupo e o nome, semelhante ao PCRE:
<?php
mb_ereg('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>
\k<>
and \k''
para fazer referência a capturas nomeadas na string de substituição: <?php
mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<>
and \k''
também podem ser usados para referências numeradas, que também funcionam com números de grupos maiores que 9. O suporte para as opções completion_append_character
e completion_suppress_append
foi adicionado a readline_info(). Essas opções só estão disponíveis se o PHP estiver vinculado a libreadline (ao invés de libedit).