Fork me on GitHub

Grupo de desenvolvedores de PHP do estado de São Paulo
Próximos encontros e eventos? Visite a página do PHPSP no Meetup

O que o PHP7 vai quebrar #2

Por em em Artigos

Introdução

O famigerado PHP7 esta quase chegando, data prevista de lançamento é dia 12/11/2015. Muitas novidades, promessas de melhorias de até 50% na performance, mais seguro e melhor preparado para os desafios dos próximos 20 anos.
Expectativas de melhora a parte, o que vai mudar, sair ou quebrar na “userland“? Como se preparar? É disso que vou falar nessa série de artigos.

Outros artigos dessa série:
1. Mudanças na ordem de parseamento de nome de variáveis, propriedades e referência a métodos indiretos

o_que_o_php7_vai_quebrar2

2. Mudanças na interpretação de expressões e variáveis resultado de funções por referência como parâmetros de funções

2.1. O que é?

Funções que recebem como parâmetros variáveis por referência oriundas do retorno de funções podem ser “ludibriadas” usando a técnica de converter o parâmetro retornado (quando não uma referência mas um valor) para uma expressão. Complicado? Bastante. Em código fica um pouco mais fácil de entender:

2.2. Como é?

No PHP5.x era possível enganar a engine ao transformar o retorno não referencial em expressão com o uso dos parênteses. Já não era uma boa prática e levava muito a confusões. Essa brecha foi agora fechada, esse tipo de chamada agora irá sempre retornar o erro “Strict Standards: Only variables should be passed by reference“.

2.3. Como vai ser?

Mais uma vez, um caso de aplicação das boas práticas direto no core. A partir da versão 7.x não será mais possível burlar a engine utilizando os parênteses. Funções que tem referências como parâmetros devem receber sempre referências e não valores.

2.4. Como se preparar para a mudança?

Infelizmente nesse caso não há uma maneira simples e rápida de adequação de código para que funcione instantaneamente nas duas versões, a regra é mesmo seguir as boas práticas e não tentar (já na versão 5.x) burlar a engine. Passe referências ou altere a função para receber valores.

2.5. Implicações?

Por ser um comportamento até certo ponto errôneo e que se quer deveria ser suportado, as implicações são basicamente a melhoria da qualidade do código já que a coesão e consistência das assinaturas de função e seu uso é sempre bem vinda.

Para mais detalhes e maiores informações técnicas, consulte a RFC dessa mudança.

Até mais!

Tags:

Sobre João Paulo

Santista roxo. Assistente de Sobrinho Jr. metido a CIO, CTO e a coisa toda. Sabe de nada mas acha que entende de alguma coisa. Fã e entusiasta de futebol, código aberto, PHP e elePHPants.

Mais posts de .