PHP 7.2: quais são as novidades da nova versão do PHP – Tudo sobre PHP
Friday December 15th, 2017 [email protected]
O PHP agora está se concentrando em recursos de linguagem que ajudarão a todos a escrever um código melhor. Neste ano, em novembro, tivemos 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.
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.
func_overload
O PHP 7.2 foi oficialmente lançado em novembro deste ano e trouxe diversas novidades. Algumas das principais:
Todos os outros RFC's aprovados, que estão sendo implementados na versão 7.2, você poderá ver aqui.
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:
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".
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:
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:
// Argon2i com fatores de custo padrão
// Argon2i com fatores de custo personalizados
function acceptsObject(object $obj) {
// Este código será analisado estaticamente e está correto
acceptsObject(json_decode('{}'));
acceptsObject(new MyObject());
// Aqui será analisado estaticamente e contém erro
// e lançaria um TypeError em tempo de execução
acceptsObject("Ceci n'est pas une object.");
// Esta função será analisada estaticamente de acordo com o
// tipo retornado
function correctFunction() : object {
$obj = json_decode('{}');
// Esta função será analisada estaticamente e contém erro
// que resultará em falha em tempo de execução
function errorFunction() : object {
Outra novidade que veio na versão 7.2 é referente à criptografia moderna, libsodium, que é 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
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.
E os clientes KingHost também podem usar. Fomos a primeira empresa de hospedagem do Brasil a disponibilizar suporte ao PHP 7.2, no mesmo dia em que a comunidade liberou.
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 a novas features. Vale muito a pena olhar cada item alterado.
Já posso testar esta nova versão? Sim, já está disponível o Release Candidate 5 Released. Você já pode ver quais alterações entrarão nessa nova versão e testar.
Podemos usar Docker para testar facilmente, usando as imagens oficiais do PHP disponível no Docker Hub: PHP 7.2.0 Release Candidate.
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.