PHP 8: conheça as melhorias da nova versão do PHP

Já estamos prontos para a chegada do PHP 8! E você? Também está aguardando ansiosamente? Nesse artigo vamos destrinchar um pouquinho das novidades que vêm por aí!

Se você ainda não conhece o PHP, recomendamos a leitura do nosso Curso de Introdução ao PHP. Mas se já conhece, fique a vontade para continuar sua leitura e vamos juntos desvendar essas novidade!

Você encontrará nesse artigo os seguintes tópicos:

O Lançamento do PHP 8

O PHP 8 já vem sendo debatido e desenvolvido há um bom tempo. Mas, conforme a página do PHP 8, agora já sabemos que a data de seu lançamento está programada para o dia 26 de novembro de 2020!

Porém, antes de começarmos a falar sobre as novidades, precisamos esclarecer para vocês que o PHP 8 ainda está em período de desenvolvimento. Portanto, estamos utilizando como base as informações de funcionalidades já debatidas, votadas, aceitas e implementas, segundo a página de RFC do próprio PHP.

As principais Novidades do PHP 8

A nova versão do PHP, o PHP 8.0 está sendo muito debatida e esperada pelos desenvolvedores. Isso pois ela promete uma séria de melhorias e mudanças que impactarão no futuro dessa linguagem de programação.

Conforme falamos anteriormente, o PHP 8 ainda está em desenvolvimento, mas nesse tópico vamos abordar sobre as principais novidades já implementadas na próxima versão dessa poderosa linguagem.

Compilador JIT (Just in Time)

De longe, essa é uma das novidades mais esperadas para o PHP 8! Isso pois o JIT Compiler (Just in Time) irá proporcionar um aumento de performance para diversas funções! Principalmente quando se tratar de processamento de imagens e operações de Machine Learning.

Resumidamente, o JIT é um compilador que faz parte da extensão Opcache. Com o JIT, alguns Opcodes não precisarão ser interpretados pela ZendVM, pois, essas instruções serão executadas diretamente a nível de CPU. Por isso que você poderá observar um grande ganho de desempenho para algumas instruções.

No vídeo abaixo, você pode ver como o JIT entrega um resultado de desempenho bem mais rápido que o encontrado no PHP 7. Você pode encontrar o vídeo no Youtube, publicado por Zeev Surasky, co-autor da proposta PHP JIT. Na esquerda, ele apresenta o método atualmente utilizado, já na direita, seria a mesma aplicação rodando com o JIT.

Através do benchmark Mandelbrot, você pode ver a demonstração de qualidade do JIT. Nele, você pode ver um desempenho do PHP 8 de mais de 4 vezes superior ao PHP 7.4 (0,011 seg vs 0,046 seg no PHP 7.4).

De uma forma geral, você poderá observar grandes impactos de desempenho em operações a nível de CPU.

Porém, é claro que o JIT também traz algumas desvantagens, e um dos principais é que ele aumenta a probabilidade de novos BUGs surgirem. Ainda assim, caso isso aconteça, já podemos esperar futuras correções nas atualizações posteriores para esses bugs.

No RFC sobre o JIT você pode estar lendo mais sobre esse compilador e os resultados obtidos no PHP 8.

Avisos de Erros mais elaborados e precisos

Um grande problema para todos desenvolvedor é quando encontramos um erro.

Atualmente, com o PHP, você já pode ver os avisos de erros. Mas, esses avisos ainda são gerados de forma básica. Porém, no PHP 8.0, você já poderá encontrar avisos com explicações mais precisas.

Com certeza esse será um grande diferencial para os programadores, pois economizará muito tempo para solucionar problemas em meio as diversas linhas de código. Além de facilitar muito a vida de quem está aprendendo e iniciando na linguagem PHP.

Union Types V2

Um Union Type ou “tipo de união” aceitam valores que podem ser de diferentes tipos. Por exemplo, uma mesma variável poderá consistir em dois tipos, em vez de um único.

Atualmente, o PHP ainda não oferece suporte a Union Types, com exceção da sintaxe ?type e do tipo especial iterable. Até então, para utilizar Union Types era necessário que você especificasse em phpdocs, como por exemplo, utilizando o myxed

Porém, a partir da versão PHP 8, você poderá utilizar os Union Types. Dessa forma, o PHP passará a ter suporte a vários tipos de dados em sua estrutura, e não apenas um único valor.

Você poderá aplicar a parâmetros de métodos e também no retorno de métodos de suas classes. Para definir os tipos que uma variável poderá receber, bastará utilizar o sinal “|” (pipe). De uma forma resumida, a nova sintaxe ficará como no exemplo abaixo:

function myFunction(int|float $number): int
{
  return round($number);
}

Você pode ler mais sobre os Union Types v2 na RFC.

Classe Weak Map

Outra grande novidade do PHP 8 é a adição da classe Weak Map. O Weak Map, ou mapa fraco, é um objeto em que as chaves possuem referencias fracas, ou seja, elas não são impedidas de serem coletadas.

Com a classe Weak Map você pode criar uma referencia para um objeto. Dessa forma, quando este objeto for removido, sua referência também será removida.

A partir do PHP 7.4 já havia suporte a referências fracas. Porém, no PHP 8, será introduzido a classe WeakMap para criar objetos a serem usados como chaves fracas de mapas. Dessa forma, eles poderão ser removidos e destruídos do mapa se não houver mais referências ao objeto chave.

A grande vantagem disso, é que, em processos de longa duração, evitará vazamentos de memória. Portanto, isso resulta em melhora no desempenho.

Você pode ler mais a respeito de Weak Maps através da sua RFC.

Compatibilidade do PHP 8 com os padrões atuais de DOM

O PHP 8 receberá uma atualização na sua DOM API. Portanto, serão adcionado algumas interfaces e classes para tornar a API ext/dom compatível com o padrão atual DOM, que está em contante atualização.

Ou seja, agora o PHP 8 estará compatível com as mudanças atuais do padrão DOM. Dessa forma, você conseguirá manipular elementos DOM mais facilmente através do próprio PHP.

Você pode ler mais sobre isso na RFC dessa proposta.

Throw Expressions no PHP 8

Atualmente, no PHP, você pode utilizar o throw como uma instrução ou afirmação. Porém, até a versão 7.4, é impossível utiliza-lo em locais em que apenas uma expressão fosse permitida.

Visando resolver esse problema, no PHP 8 o throw passará a ser uma expressão. Dessa forma, você poderá utiliza-lo no lugar de expressões. Portanto, será possível utiliza-lo em funções de seta, Operador de coalescência (Null Coalesce), operadores ternários e elvis, etc.

Na própria RFC sobre o Throw, você pode encontrar diversos exemplos de como você poderá utilizar o throw a partir do PHP 8.

Mudanças no método Construtor

Se tratando de sintaxe, uma grande mudança que será proveitosa tanto para desenvolvedores iniciantes quanto para quem já utiliza o PHP a mais tempo é as mudanças no método construtor.

Na programação Orientada a Objetos, o método construtor é um dos mais importantes para uma classe. Portanto, o PHP 8 se propõe a simplifica-lo.

Vamos utilizar como exemplo a criação de uma classe “Pessoa”. Dentro dessa classe, armazenaremos informações de nome, idade e altura. Atualmente, no php 7.4, você precisa fazer o código como no exemplo abaixo:

class pessoa{
    public string $nome;
    public int $idade;
    public float $altura;

    public function __construct(
        string $nome,
        int $idade,
        float $altura
    ){
        $this->nome= $nome;
        $this->idade= $idade;
        $this->altura= $altura;
    }
}

Se você observar bem, perceberá que você precisou repetir o nome dos atributos três vezes. Portanto, isso acaba tornando o código “redundante”. Pensando nisso, no PHP 8, com método contrutor você conseguirá reescrever a mesma classe conforme o exemplo abaixo:

class Pessoa{
    public function __construct(
        public string $nome,
        public int $idade,
        public float $altura
    ) {

    }
}

Observe que, agora, você poderá escrever a mesma classe porém com bem menos linhas de código. Além disso, torna o código mais simples de se ler e entender. Portanto, as mudanças do método construtor do PHP 8 serão muito interessante para os desenvolvedores.

Porém, é importante que você saiba que essa funcionalidade possuirá algumas exceções. Você apenas conseguirá utilizar esse recurso em métodos construtores para classes não abstratas. Portanto, para entender melhor esse assunto, recomendamos que você leia a RFC sobre a modificação do método construtor.

Novas Funções no PHP 8

Para finalizarmos nossa lista, não podemos deixar de comentar sobre três novas funções que serão acrescentadas ao PHP. São elas:

  • str_contains
  • str_starts_with() e str_ends_with()
  • get_debug_type

A função str_contains

A nova função str_contains permite realizar uma busca dentro de uma string.

Sua síntaxe será como no exemplo abaixo:

str_contains ( string $haystack , string $needle ) : bool

Esta sintaxe significa que será executado uma verificação para indicar se $needle está presente dentro da string $haystack. Caso sim, ela retornará o valor booleano true. Caso não esteja, então, retornará false.

Portanto, agora podemos utilizar a função str_contains para escrever o código como no exemplo abaixo:

$string = 'Frase de exemplo';
$verificar= 'exemplo';

if (str_contains($string, $verificar)) {
	echo "A String foi encontrada";
} else {
	echo "A String não foi encontrada";
}

Como você pode perceber, isso tornará a busca dentro de uma string mais legível e menos propenso a erros.

Você pode estar lendo a RFC sobre essa função para poder verificar todas suas características.

As funções str_starts_with() e str_ends_with()

As funções str_starts_with() e str_ends_with() funcionam parecidos com a função anterior, a str_contains. Porém, a diferença é que elas verificam se um string começa ou termina com determinada string.

Sua similaridade com str_contains também se dá pela sintaxe. Veja nos códigos de exemplo abaixo a sintaxe da str_starts_with() e str_ends_with():

str_starts_with (string $haystack , string $needle) : bool
str_ends_with (string $haystack , string $needle) : bool

Portanto, quando você utilizar essa funções, será possível economizar no uso da CPU. Isso acontece pois não será necessário percorrer por toda uma string, a função irá verificar apenas o inicio ou o final.

A função get_debug_type

A nova função que chegará junto ao PHP 8 é a get_debug_type. Com ela, você poderá retornar o tipo de dado de uma variável.

Portanto, você pode perceber que ela é bem parecida com a função já existente gettype(). Porém, a get_debug_type() representa uma melhoria para o PHP, pois ela consegue retornar a verificação de tipo.

Você pode ver na própria RFC as principais diferenças de retornos entre as funções get_debug_type() e gettype()

Outras mudanças e novidades do PHP 8

Além das novidades apresentadas nos tópicos anteriores, o PHP 8 também receberá outras mudanças e novidades.

A partir do PHP 8, as matrizes poderão ser iniciadas a partir de um índice negativo. Ou seja, se você iniciar uma Array através de um índice -5, ela será continuada como -4,-3,-2… Atualmente, no PHP, as Arrays iniciadas com índices negativos, continuam automaticamente a partir do índice 0.

Até o PHP 7.4, se você quiser acrescentar uma anotação a partir de um atributo, você precisa utilizar os  doc-comments. Porém, a partir do PHP 8, você poderá utilizar os Atributos v2.

Outra novidade é que agora, você também poderá utilizar as vírgulas de rastreamento (trailing comma) com funções, métodos e fechamentos, ou seja, como lista de parâmetros. Anteriormente, no PHP, só era possível utilizar as vírgulas de rastreamento em sintaxe de lista e em chamadas de funções.

Outra alteração de sintaxe que haverá a partir do PHP 8 é na busca através do nome da classe. Agora você poderá utilizar a sintaxe ::class nos objetos.

Enfim, há diversas novidades e mudanças chegando junto a atualização do PHP. Além de todas as já citadas, você pode encontrar outras. Portanto, você pode acompanhar todas essas novidades na RFC do PHP 8.

Conclusões sobre o PHP 8

Depois da leitura de todo esse post, não há dúvidas de que o PHP 8 chegará com grande impacto na linguagem de servidor mais utilizada na web!

Nós da Homehost estamos ansiosos pela chegada dessa versão! E agora que você já sabe o que podemos esperar com o PHP 8, também está empolgado como nós?

Até o momento, o compilador Just in Time (JIT) é uma das novidades mais comentadas. Porém, nós queremos saber de você o que achou das novidades e qual a sua preferida? Deixe um comentário e compartilhe essa publicação com todos os desenvolvedores PHP que você conhece e vamos juntos embarcar nessa novidade!

Também não deixe de ler mais sobre o PHP, aqui no blog você encontrará diversos artigos falando sobre. Por exemplo, você pode ler sobre o que é o PHP, um curso de introdução a linguagem, sobre os formatos de datas, as funções try e catch, laços de iteração com foreach e muito mais!

Este artigo foi útil?

Obrigado pela resposta!
Rafael Marques

Rafael Marques

Especialista em Desenvolvimento Web e Marketing. É apaixonado por tecnologia, empreendedorismo, audiovisual e animais. Em sua carreira, dedica-se ao empreendedorismo, além de atuar como Desenvolvedor Fullstack e redator técnico. Gosta de usar seu tempo livre para assistir a filmes, jogar, escrever, e passar um bom tempo brincando e mimando seus animais de estimação.

Contato: rafael.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!