PHP 7.2: quais são as novidades da próxima versão do PHP

PHP 7.2 - novidades
Atualização: a nova versão foi lançada em 30 de novembro. A relação de melhorias e novos recursos pode ser conferida no site oficial do PHP.

2015 foi um ano importante para o PHP, afinal, somente onze anos após a sua versão 5.0, uma nova versão principal foi finalmente lançada! O PHP 7 trouxe muitos novos recursos de linguagem e um impressionante ganho de desempenho. Mas não parou por aí, em dezembro de 2016 foi lançada a mais recente versão, a 7.1, que é a que temos disponível atualmente.

O PHP agora está se concentrando em recursos de linguagem que ajudarão a todos a escrever um código melhor. Neste ano, no mês de novembro, teremos o lançamento da versão 7.2. Mais detalhes sobre o calendário de lançamento e todas as atualizações  podem ser vistos na RFC e no Upgrade Notes. Neste artigo, vou falar um pouco sobre as principais mudanças propostas para esta nova versão.

O que se tornará obsoleto no PHP 7.2

A RFC Deprecations for PHP 7.2 mostra algumas funcionalidades cujo uso será desencorajado, pois serão retiradas ou substituídas no PHP. Conforme a RFC, estas funcionalidades deverão ser removidas o mais tardar na versão 8.0.

Abaixo algumas das funcionalidades que se tornarão obsoletas:

  • __autoload
  • $php_errormsg
  • create_function()
  • mbstring.func_overload
  • (unset) cast
  • parse_str() without second argument
  • gmp_random()
  • each()
  • assert() with string argument
  • $errcontext argument of error handler

Principais novidades que entrarão no PHP 7.2

O PHP 7.2 será oficialmente lançado em novembro de 2017 e trará consigo diversas novidades. Algumas das principais:

  • get_class() desabilita o parâmetro nulo;
  • Impedir number_format() de retornar zero negativo;
  • Argon2 Password Hash;
  • Object typehint;
  • Libsodium.

Todos os outros RFC’s aprovados, e que estão sendo implementados na versão 7.2, você pode ver aqui.

Abaixo veremos algumas dessas novidades e pequenos exemplos com código.

get_class() desabilita o parâmetro nulo

Quando null é passado como parâmetro para get_class() dentro de um contexto de classe, o comportamento da função pode ser altamente surpreendente:

Se o $result contiver um objeto válido, o resultado será o retorno do nome da classe conforme objeto passado.

Se o $result for nulo, a saída virá do contexto da classe na qual get_class() foi chamado, neste caso “Foo”.

Esta característica viola o princípio de POLA (Principle of least astonishment): “se uma característica necessária tiver um alto fator de espanto, talvez seja necessário redesenhar o recurso“.

Esta RFC propõe permitir que null seja passado para a função como um parâmetro válido. Se get_class() for chamado tendo null como parâmetro, um aviso será emitido:

Warning: get_class() expects parameter 1 to be object, null given in %s on line %d

Impedir number_format() de retornar zero negativo

Hoje, ao executar number_format(-0.00), o retorno é a string (1) “0”. No entanto, ao executar number_format(-0.01), o retorno é a string (2) “-0”.

Este RFC propõe manter number_format() consistente e não exibir o sinal quando um número é arredondado para zero.

Argon2 Password Hash

Argon2 é o algoritmo de hashing de senha vencedor do concurso “Password Hashing Competition” de 2015, sendo assim sua utilização muito bem recomendada. Ao contrário do Bcrypt, que apenas possui um único fator de custo, o Argon2 é parametrizado por três fatores distintos:

  1. Tempo de execução
  2. Memória necessária
  3. Grau de paralelismo

Esta RFC propõe a implementação do Argon2i (v1.3) nas funções password_ * para uso como uma alternativa segura ao Bcrypt.

A função password_hash() é alterada para aceitar PASSWORD_ARGON2I como algoritmo e aceitar o custo da memória, o custo do tempo e o grau de paralelismo como opções. O exemplo a seguir ilustra a nova funcionalidade.

Object typehint

O PHP 7 introduziu tipos escalares para parâmetros e também para declarar tipos de retorno de funções.

No entanto, atualmente não é possível declarar que uma função precisa receber um object como parâmetro ou declarar que uma função deve retornar um object.

Este RFC propõe que o object possa ser usado como um tipo de parâmetro e como um tipo de retorno. Qualquer objeto passaria na verificação de tipo.

Exemplo:

Tipo de parâmetro:

Tipo de retorno:

A primeira linguagem de programação a adotar criptografia moderna

Outra novidade que virá na versão 7.2 é referente à criptografia moderna libsodium, que será parte da extensão principal do PHP 7.2.  Sodium é uma biblioteca que facilita a utilização de criptografia, descriptografia, assinatura, hash de senha e muito mais. Seu objetivo é fornecer todas as operações básicas necessárias para criar ferramentas criptográficas de alto nível. Mais informações podem ser encontradas na RFC de adição da libsodium no PHP 7.2.

Libsodium

Fonte: github.com/jedisct1/libsodium

Concluindo

Conforme dados do packagist.org a adoção da versão 7 do PHP já superou a 5.6, como podemos ver no comparativo abaixo, feito com base em dados de novembro de 2016 e maio de 2017.

PHP 7 - estatísticas de uso

Fonte: seld.be/notes/php-versions-stats-2017-1-edition

Você ainda não está utilizando PHP 7? O que está te impedindo de fazer a atualização? Na KingHost nós o utilizamos em todos os novos projetos e tentamos atualizar para a versão 7 os projetos antigos, sempre que possível.

E os clientes KingHost também podem usar, pois fomos uma das primeiras empresas de hospedagem do Brasil a disponibilizar suporte ao PHP 7 e 7.1, e com certeza seremos os primeiros a disponibilizar a versão 7.2.

Atualização: a projeção da KingHost se confirmou. A empresa foi uma das primeiras a disponibilizar a nova versão.

Na página dos RFC’s você encontra a documentação completa de todas as features, inclusive com exemplos. Essa versão, claro, não se limita apenas à novas features. Vale muito a pena olhar cada item alterado.

Já posso testar esta nova versão? Sim, o release Alpha 2 já está disponível. Você já pode ver quais alterações entrarão nessa nova versão e testar.

Isso é tudo por enquanto, mas se você se deparar com outras mudanças que não foram mencionadas aqui, deixe um comentário abaixo. Obrigado pela leitura.

Tags:

Por:

Fernando Silva é analista de desenvolvimento na KingHost. Graduado em Análise e Desenvolvimento de Sistemas (ADS) pela Faculdade Senac Porto Alegre, onde ganhou o Prêmio Keller de melhor trajetória acadêmica. Atualmente faz pós-graduação em Segurança Cibernética pela UFGRS, além disso, é um dos coordenadores da comunidade PHP-RS, é entusiasta Open Source e Software Livre.

Deixe um comentário

Todos os comentários são moderados. Então, seu comentário não será exibido imediatamente após o envio.
Mas fique tranquilo(a), porque ele será respondido em breve. 😉