Se você já estava cansado de aguardar pela lançamento do PHP 7 saiba que ele existe e sai este ano, provavelmente já este mês!

Se você é um desenvolvedor PHP e acompanha as últimas novidades da comunidade da linguagem, a essa altura já sabe que o nome para a nova versão oficial será PHP 7, de acordo com a votação da maioria (sim, o PHP é uma linguagem democrática e a própria comunidade é quem dita as regras do seu futuro).

Mas o que isso significa pra você? A comunidade PHP tem percebido uma enorme resistência por parte dos provedores de hospedagem web em migrar ou implementar a nova versão da linguagem além das versões 5.x. A grande dúvida é: será que uma nova versão não vai causar um monte de problemas de compatibilidade e estragar o que já funciona bem?

A resposta a esta pergunta é: depende.

Uma quantidade considerável de inconsistências e melhorias foram implementadas. Além disso, a performance é um dos grandes objetivos do PHP 7.

Mas vamos mais a fundo nos detalhes.

Ajustes de inconsistência

Duas grandes melhorias valem a pena serem destacadas nesta nova release do PHP.

A maior delas é a adição de uma AST (Abstract Syntax Tree) – uma representação intermediária do código durante a compilação. Com isso funcionando nós conseguimos contornar alguns problemas de performance

A segunda, que é a introdução da Uniform Variable Syntax (UVS), pode talvez te dar um pouco de trabalho na questão da compatibilidade de versões. Ela resolve inúmeras inconsistências na maneira como expressões são validadas. Por exemplo, a capacidade de chamar closures em atributos utilizando ($objeto->propriedade)() , assim como fazer chamadas estáticas em cadeia, por exemplo:

No entanto, algumas semânticas estão mudando. Em especial as semânticas quando utilizamos o fromato variavel-variaveis/atributos.

Antes do PHP 7, $obj->$propriedades[‘nome’] iria acessar a propriedade cujo nome é o mesmo da chave do array $propriedades. Já com o UVS, irá acessar o nome da chave da propriedade que reside em $propriedades. Para ser mais específico:

No PHP5.6 isso seria interpretado como:

E no PHP 7 será interpretado como:

Enquanto o uso do formato variável-variáveis é geralmente um caso pouco utilizado, e até mesmo desaprovado pela maioria dos desenvolvedores, o formato variável-propriedades são casos muito mais comuns. Você pode, no entanto, facilmente contornar esta questão na sua aplicação com chaves duplas (como mostrado acima) para garantir o mesmo comportamento tanto no PHP 5.6 como no 7.

Performance

O grande motivo para se migrar para o PHP 7 é a melhora da performance, impulsionada pelas mudanças introduzidas com o phpng. O aumento da performance poderá ser, na verdade, o catalizador da adoção desta release, especialmente para pequenas empresas de host que normalmente não podem se dar ao luxo de suportarem milhares de contas, mas que agora poderão ter mais clientes utilizando o mesmo hardware.

Do jeito que as coisas foram feitas, e dependendo também de como você encara esse assunto, eu diria que a performance do PHP 7 está equivalente ao HHVM do Facebook, que possui um compilador JIT (Just in Time) que compila o código PHP inteiro até a linguagem de máquina.

O PHP 7 não possui um JIT,  embora isso tenha sido discutido muito pela comunidade. Ainda não está claro se existem ainda maiores ganhos de performance com a inclusão de um, mas com certeza seria interessante se alguém ousasse criar algum!

Além da performance, haverá uma diminuição considerável no consumo de memória, visto a otimização de estruturas internas ser um dos fatores principais para se alcançar melhorias de performance.

Incompatibilidade com versões anteriores

Os desenvolvedores interinos tentaram de todas as formas evitar o máximo possível de incompatibilidade entre as versões, mas nem sempre isso é possível quando se deseja realmente levar uma linguagem de programação adiante.

No entanto, assim como no caso do UVS mencionado a pouco, a maioria destes itens são pequenos, como por exemplo  o erro que ocorre quando se tenta chamar um método de um não-objeto (catchable fatal errors when trying to call a method on a non-object):

Além disso, tags ASP e script foram removidas, o que significa que você não poderá mais usar <% e <%=, ou <script language=”php”> (e suas respectivas tags de fechamento, %>, e </script>.

Outra grande mudança encontrada nessa release é a remoção completa de TODAS as funcionalidades deprecated (ultrapassadas).

E mais importante ainda, a remoção da extensão de expressão regular POSIX ext/ereg (deprecated na versão 5.3) e a velha extensão ext/mysql (deprecated na versão 5.5).

Outra mudança pequena, porém incompatível, é a desabilitação de múltiplos casos de default dentro de um switch; . Antes do PHP 7 o código seguinte era permitido:

Isso iria resultar no último default ser executado.

Mas agora no PHP 7 isso retornará um erro:

Algo como: declarações Switch só podem conter uma cláusula padrão (default)

Novas Funcionalidades

Nós vamos ter que lidar um pouco com pequenas questões de incompatibilidade. Nós adoramos performance. Mas também queremos novas funcionalidades! E convenhamos, são as coisas novas que fazem com que uma nova release seja divertida — e o PHP 7 não possui poucas.

Type Hints escaláveis e Return Types

Vou começar falando sobre a mudança mais controversa que foi adicionada ao PHP 7: Scalar Type Hints.

Para os usuários finais o que isso significa é que você vai utilizar type-hints com types escaláveis. Especificamente: int, float, string, e bool.  Por padrão os type-hints são non-strict, o que significa que eles irão se converter ao type original especificado pelo type-hint. Na prática isso significa que se você passar int(1) em uma função que pede um float, irá se tornar um float(1.0). Passando float(1.5) em uma função que pede um int, vai ser interpretado como um int(1).

Veja um exemplo:

O PHP 7 também suporta Return Type Hints, que por sua vez suporta todos os mesmos tipos de argumentos. Segue a mesma sintaxe do hack, adicionando o argumento em parenteses com ponto e vírgula seguida do tipo:

 

Neste exemplo o “: bool” indica que a função irá retornar um valor booleano. As mesmas regras que se aplicam aos type-hints também se aplicam aos returned type hints no modo strict.

Operador de Comparação Combinado

A novidade que achei mais interessante no PHP 7 foi a adição do Operador de Comparação Combinado ” <=> “. Ele funciona exatamente como a função nativa strcmp(), ou version_compare(), retornando -1 se o argumento da esquerda for menor que o da direita, 0 se forem iguais e 1 se o da esquerda foi maior do que o da direita. A grande diferença é que ele pode ser usado em qualquer tipos de argumento, não apenas strings mas também inteiros, floats, arrays, etc.

A forma mais comum de se utilizar esse novo operador talvez seja a de ordenar funções de callback:

 E isso é só o começo

Neste post procurei colocar as mudanças e correções mais dramáticas que o PHP irá sofrer nesta nova versão. É claro que o PHP 7 é muito mais do que isso. Pretendo nos próximos posts explicar pelo menos mais 6 novas características desta nova release. Até a próxima!

Fabio Ferreira on EmailFabio Ferreira on InstagramFabio Ferreira on Twitter
Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.


Author: Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Instagram did not return any images.

Siga também nosso Instagram!