- A sintaxe de Heredoc e Nowdoc ficaram um pouco menos restritiva
- Permitir vírgulas a direita em chamadas de funções e métodos
- Opção para ativar exceptions em erros das funções json_encode e json_decode
- Possibilidade de uso de referencia em list()
- Adicionado a função is_countable()
1 – A sintaxe de Heredoc e Nowdoc ficaram um pouco menos restritiva
Em versões anteriores, era necessário para o uso do recurso de digitação em multi-linhas a obrigatoriedade de finalizar o texto digitado com a mesma palavra que iniciou o bloco, como abaixo demonstrado:
$foo = <<<IDENTIFIER the crazy dog jumps over the lazy fox "foo" bar; IDENTIFIER
O RFC do PHP7.3 sugere a remoção desta obrigatoriedade com o objetivo de deixar o código mais legível. Antes, era necessário inclusive quebrar a identação utilizada no resto do código só para atender o sistema de tokenização do Heredoc e Nowdoc.
Permitir vírgulas a direita em chamadas de funções e métodos
Esta alteração permitiria que na chamada a funções e métodos seja possível utilizar vírgulas vagas a direita, como no exemplo abaixo:
foo('arg1', 'arg2',); // Atenção a vírgula ao final
Não seria ainda possível usar mais de uma vírgula ao final, e nem utilizar vírgulas para saltar argumentos não informados.
Outro ponto importante, é que na declaração de métodos e funções, o uso deste recurso não seria possível.
Opção para ativar exceptions em erros das funções json_encode e json_decode
Adicionado a opção JSON_THROW_ON_ERROR as funções de modo que em caso de falha, não seja retornado null, mas sim, o novo tipo JsonException, que pode ser capturado com um try/catch, como no exemplo abaixo:
try { json_decode("{", false, 512, JSON_THROW_ON_ERROR); } catch (\JsonException $exception) { echo $exception->getMessage(); // "Syntax error" }
JsonException é uma subclasse de Exception e pode normalmente ser capturado pelo uso deste ‘genérico’.
Possibilidade de uso de referencia em list()
$arr = ['maca', 'laranja']; list($a, &$b) = $arr; $b = 'banana'; echo $arr[1]; // Fatal error: [] and list() assignments cannot be by reference in .. on line ..
Isto era o que ocorria ao tentar fazer uso de referencia em list().
No entanto, agora irá ser apresentado em echo $arr[1] a string ‘banana’.
Importante notar que não será possível efetuar referência de variável não referenciáveis, como em:
list($a, &$b) = [12, 14];
Irá ser apresentado a mensagem de erro fatal, Cannot assign reference to non referencable value in .. on line ..
Adicionado a função is_countable()
O PHP 7.2 adicionou muitas funções como deprecated. Além disto, se chamar count() em uma variável que não seja “contável”, o PHP mostrará um alerta sobre isso.
Uma solução comum era verificar se a variável determinada é “contável” antes de chamar count() nela.
Uma variável “contável” é um array ou um objeto cuja classe implementa a interface \Countable.
O PHP 7.3 agora tem a nova função is_countable() que retorna se a variável passada é ou não “contável”.