PHP 7.2: quais são as novidades da próxima versão 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, no qual o uso será desencorajado, pois serão retiradas ou substituídas no PHP. Conforme 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, que estão sendo implementados na versão 7.2, você poderá 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 será do contexto da classe em que 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 com 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), retorna a string (1) “0”, no entanto, ao executar number_format(-0.01), retorna 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 muito bem recomendado a sua utilização. 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 o algoritmo e aceitar o custo da memória, o custo do tempo e o grau de paralelismo como opções. O exemplo a seguir ilustram 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 a 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, assinaturas, 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.

Fonte: https://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, que foi feito com base em dados de novembro de 2016 e maio de 2017.

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

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

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, já está disponível o release Alpha 2. Você já pode ver quais alterações entrarão nessa nova versão e testar.

Podemos usar Docker para testar facilmente, usando uma imagem criada por Colin O’Dell, neste texto ele fala mais sobre e a imagem está disponível no Docker Hub: PHP 7.2 Pre-Release Images.

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

Texto originalmente publicado no blog tudo sobre Hospedagem de Sites.

Show your support

Clapping shows how much you appreciated Fernando Silva’s story.