O PHP 7.4 será lançado em 28 de novembro de 2019. Seus recursos incluem:
- Arrow functions para cleaner one-liner functions
- Preloading para melhorar o desempenho
- Typed properties nas classes
- Variação de tipo aprimorada
- O operador null de atribuição de coalescência como abreviação
- FFI para melhor desenvolvimento de extensão em PHP
- Underscores podem ser usados para formatar valores numéricos
- Spread operator em arrays
- E mais, você pode ler sobre isso aqui
Novas características
O PHP 7.4 vem com uma quantidade notável de novos recursos. Começaremos com uma lista de todos os novos recursos e, depois, examinaremos as alterações e descontinuações.
Uma observação antes de nos aprofundarmos: se você ainda estiver em uma versão inferior do PHP, também desejará ler as novidades do PHP 7.3.
Arrow functions rfc
As Arrow functions, também chamadas de “short closures”, permitem funções de uma linha menos detalhadas.
Enquanto você escrevia isso anteriormente:
array_map(function (User $user) {
return $user->id;
}, $users)
Agora você pode escrever isso:
array_map(fn (User $user) => $user->id, $users)
Existem algumas notas sobre as arrow functions:
- Eles sempre podem acessar o escopo pai, não há necessidade da palavra-chave.
- $this está disponível como closures normais.
- As arrow functions podem conter apenas uma linha, que também é a declaração de retorno.
- Você pode ler sobre eles em profundidade aqui.
Typed properties rfc
Variáveis de classe podem ser sugeridas por tipo:
class A
{
public string $name;
public ?Foo $foo;
}
Há muito o que contar sobre esse recurso, então escrevi um post dedicado sobre eles.
Improved type variance rfc
Eu também escrevi sobre o sistema de tipos do PHP no passado, então é bom ver algumas melhorias realmente chegando ao núcleo do PHP.
A variação de tipo é outro tópico que vale o seu próprio post no blog, mas, resumindo: você poderá usar tipos de retorno covariantes –
class ParentType {}
class ChildType extends ParentType {}
class A
{
public function covariantReturnTypes(): ParentType
{ /* … */ }
}
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* … */ }
— e argumentos contrários.
class A
{
public function contraVariantArguments(ChildType $type)
{ /* … */ }
}
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* … */ }
}
Operador null de atribuição coalescente rfc
Em seguida, é o operador null de atribuição de coalescência, uma abreviação para operações de coalescência nula. Em vez de fazer isso:
$data['date'] = $data['date'] ?? new DateTime();
Você consegue fazer isso:
$data['date'] ??= new DateTime();
Array spread operator RFC
Em seguida, agora é possível usar o spread operator em arrays:
$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]
Observe que isso funciona apenas em arrays com chaves numéricas
Separador Literal Numérico RFC
O PHP 7.4 permite sublinhados a serem usados para separar visualmente valores numéricos. Se parece com isso:
$unformattedNumber = 107925284.88;
$formattedNumber = 107_925_284.88;
Os sublinhados são simplesmente ignorados pela engine.
Interface de função externa rfc
Passando para alguns recursos mais básicos: interface de função estrangeira ou “FFI”, em resumo, permite chamar o código C da terra do usuário. Isso significa que as extensões PHP podem ser escritas em PHP puro e carregadas via composer.
Note-se, porém, que este é um tópico complexo. Você ainda precisa de conhecimento de C para poder usar corretamente esse recurso.
Preloading rfc
Outro recurso de nível inferior é o pré-carregamento. É uma adição incrível ao núcleo do PHP, o que pode resultar em algumas melhorias significativas de desempenho.
Resumindo: se você estiver usando uma estrutura, seus arquivos deverão ser carregados e vinculados a cada solicitação. O pré-carregamento permite ao servidor carregar arquivos PHP na memória na inicialização e tê-los permanentemente disponíveis para todas as solicitações subsequentes.
Obviamente, o ganho de desempenho tem um custo: se a origem dos arquivos pré-carregados for alterada, o servidor deverá ser reiniciado.
você quer saber mais? Eu escrevi um post dedicado sobre pré-carregamento aqui.
Serialização de objetos personalizados rfc
Dois novos métodos mágicos foram adicionados:
e __serialize
. A diferença entre esses métodos e __unserialize
e __sleep
é discutida no RFC.__wakeup
Reflection for references rfc
Bibliotecas como o var dumper do Symfony dependem muito da reflection API para despejar com segurança uma variável. Anteriormente, não era possível refletir adequadamente as referências, resultando nessas bibliotecas contando com hacks para detectá-las.
O PHP 7.4 adiciona a classe ReflectionReference que resolve esse problema.
Weak references rfc
Weak references são referências a objetos, que não os impedem de serem destruídos.
mb_str_split
added RFC
Essa função fornece a mesma funcionalidade que
, mas em seqüências de vários bytes.str_split
Password Hashing Registry RFC
Mudanças internas foram feitas na maneira como as bibliotecas de hash são usadas, para que seja mais fácil para o usuário usá-las.
Mais especificamente, uma nova função
foi adicionada, retornando uma lista de todos os algoritmos de senha registrados.password_algos
Mudanças e depreciações
Além de novos recursos, também há muitas alterações no linguagem. A maioria dessas alterações é non-breaking, embora algumas possam afetar suas bases de código.
Observe que os avisos de descontinuação não são por “breaking” de definição, mas apenas um aviso ao desenvolvedor de que a funcionalidade será removida ou alterada no futuro. Seria bom não ignorar os avisos de depreciação e corrigi-los imediatamente; pois facilitará o caminho de atualização para o PHP 8.0.
Desaprovação do operador ternário associativo à esquerda RFC
O operador ternário tem algumas peculiaridades estranhas no PHP. Este RFC adiciona um aviso de descontinuação para instruções ternárias aninhadas. No PHP 8, essa depreciação será convertida em um erro de tempo de compilação.
1 ? 2 : 3 ? 4 : 5; // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok
Exceções permitidas no __toString
RFC
Anteriormente, as exceções não podiam ser lançadas em
. Eles foram proibidos devido a uma solução alternativa para alguns mecanismos antigos de tratamento de erros principais, mas Nikita apontou que essa “solução” não resolveu o problema que tentava resolver.__toString
Esse comportamento agora foi alterado e exceções podem ser lançadas de
.__toString
Precedência de concatenação RFC
Se você escrever algo assim:
echo "sum: " . $a + $b;
O PHP anteriormente o interpretaria assim:
echo ("sum: " . $a) + $b;
O PHP 8 fará com que seja interpretado assim:
echo "sum :" . ($a + $b);
O PHP 7.4 adiciona um aviso de descontinuação ao encontrar uma expressão sem parênteses contendo a
antes de um sinal de .
ou +
.-
array_merge
sem argumentos UPGRADING
Desde a adição do operador
, pode haver casos em que você queira usar spread
assim:array_merge
$merged = array_merge(...$arrayOfArrays);
Para suportar o edge case em que
estaria vazio, $arrayOfArrays
e array_merge
agora permitem uma lista de parâmetros vazia. Um array vazio será retornado se nenhuma entrada for passada.array_merge_recursive
Colchetes para acesso de array e string RFC
Foi possível acessar arrays e deslocamentos de string usando colchetes:
$array{1};
$string{3};
Isso foi depreciado.
Aviso de acesso inválido à array RFC
Se você usar a sintaxe de acesso à array em, digamos, um número inteiro; O PHP retornaria anteriormente nulo. A partir do PHP 7.4, um aviso será emitido.
$i = 1;
$i[0]; // Notice
proc_open
improvements UPGRADING
Foram efetuadas alterações no
para que ele possa executar programas sem passar por um shell. Isso é feito passando uma array em vez de uma string para o comando.proc_open
strip_tags
também aceita arrays UPGRADING
Você costumava retirar apenas várias tags da seguinte maneira:
strip_tags($string, '<a><p>')
O PHP 7.4 também permite o uso de um array:
strip_tags($string, ['a', 'p'])
ext-hash
sempre ativado rfc
Esta extensão está agora permanentemente disponível em todas as instalações PHP.
Aprimoramentos para password_hash
rfc
Esta é uma pequena mudança e adiciona suporte a hash
e argon2i
quando o PHP foi compilado sem argon2id
.libargon
PEAR não ativado por padrão EXTERNALS
Como o PEAR não é mais mantido ativamente, a equipe principal decidiu remover sua instalação padrão com o PHP 7.4.
Várias pequenas depreciações RFC
Essa RFC agrupa muitas pequenas depreciações, cada uma com seu próprio voto. Certifique-se de ler uma explicação mais detalhada na página RFC, mas aqui está uma lista de itens obsoletos:
- The
real
type - Magic quotes legacy
array_key_exists()
with objectsFILTER_SANITIZE_MAGIC_QUOTES
filter- Reflection
export()
methods mb_strrpos()
with encoding as 3rd argumentimplode()
parameter order mix- Unbinding
$this
from non-static closures hebrevc()
functionconvert_cyr_string()
functionmoney_format()
functionezmlm_hash()
functionrestore_include_path()
functionallow_url_include
ini directive
Outras alterações UPGRADING
Você deve sempre dar uma olhada no documento UPGRADING completo ao atualizar as versões do PHP.
Aqui estão algumas alterações destacadas:
- Calling
parent::
em uma classe sem pai é depreciado. - Calling
var_dump
em umDateTime
ouDateTimeImmutable
instance não deixará mais propriedades acessíveis no objeto. openssl_random_pseudo_bytes
lançará uma exceção em situações de erro..- Tentar serializar um
PDO
ouPDOStatement
instance gerará umaException
em vez de umaPDOException
. - Calling
get_object_vars()
on anArrayObject
instance wetornará as propriedades do próprio
, e não os valores da matriz ou do objeto agrupado. Observe que as conversões (array) não são afetadas.ArrayObject
ext/wwdx
foi depreciado.
RFC Melhorias no processo de votação
Tecnicamente, isso não é uma atualização relacionada ao PHP 7.4, mas vale a pena mencionar: as regras de votação para as RFCs foram alteradas.
- Eles sempre precisam de uma maioria de 2/3 para passar.
- Não há períodos de votação mais curtos, todas as RFCs devem estar abertas por pelo menos 2 semanas.
Espere agora …
Se você chegou até aqui, é provável que esteja interessado em PHP. Talvez você também esteja interessado em ler nosso conteúdos? Aqui estão algumas das coisas que escrevemos.
Ah, e por último, siga-nos nas Redes Sociais se você quiser se manter atualizado!
Autor: Brent
Obrigado por enviar o seu comentário minha jóia!