Artigos do Blog

Conteúdo novo todos os dias!

Guias e Tutoriais

Tutoriais para sua auto-ajuda

Área de Suporte

Tickets para chamado técnico

O que há de novo na versão 7.4 do PHP?

A linguagem PHP teve uma enorme evolução nos últimos anos. Na versão 7, o PHP ficou de 2 a 3 vezes mais rápido que a versão anterior. Além disso, inúmeras funcionalidades foram adicionadas ao core da linguagem.

Vale destacar também a maturidade do ecossistema PHP composto por inúmeras bibliotecas, frameworks e ferramentas. Ou seja, o PHP como plataforma está cada vez mais maduro e robusto.

E, continuando essa evolução, a próxima versão do PHP estará cheia de novas funcionalidades muito esperadas pelos desenvolvedores como as propriedades tipadas e as arrow functions, só para citar algumas.

Quando será lançada a próxima versão?

Antes de saber quais são as novas funcionalidades da próxima versão do PHP, é importante saber qual versão e em que data ela estará disponível para o público.

A linguagem PHP conta com releases anuais e, este ano, será lançada a versão 7.4 da linguagem. Essa versão é o maior release em relação ao número de funcionalidades desde o lançamento da versão 7.0 e abordarei cada uma delas neste artigo.

No mês de junho de 2019 foi disponibilizada a versão alpha 1 do PHP 7.4 para testes. E, no decorrer do ano, serão lançadas outras versões alpha, beta e release candidate antes do lançamento final do PHP 7.4 em novembro de 2019.

É possível ver o planejamento completo dos próximos releases da versão 7.4 em PHP 7.4 releases para saber a data da disponibilização de cada uma das versões.

Executando os códigos do PHP 7.4

Para auxiliar no entendimento do funcionamento de cada uma das funcionalidades do PHP 7.4, sugiro realizar a execução dos códigos de exemplo.

Isso pode ser alcançado de duas maneiras: compilar o código fonte do PHP para a obtenção do binário do interpretador ou utilizar uma imagem Docker com o binário do interpretador já compilado.

Ensinar a compilar o código fonte do PHP está fora do escopo deste artigo e, neste caso, darei preferência para a utilização de uma imagem Docker pela sua praticidade. Caso tenha interesse em aprender a compilar o código fonte do PHP (recomendo!), sugiro assistir o vídeo Compiling PHP from source do Sammy Kaye Powers.

Já que decidi utilizar uma imagem Docker pela praticidade e por ser direto ao ponto, a imagem utilizada foi a phpearth/php:7.4-cli. Ela está disponível em phpearth/docker-php junto com as demais variações.

Essa imagem permite a execução do PHP 7.4 via linha de comando que é o que precisamos para rodar os exemplos deste e dos próximos artigos. E, para facilitar a sua execução sem precisar repetir o comando docker inúmeras vezes, criarei um alias para nos auxiliar.

alias php74='docker run -it --rm -v `pwd`:/app
-w /app phpearth/php:7.4-cli php'

Explicando o comando!

O comando anterior será explicado em duas partes. A primeira parte, o comando docker run -it –rm -v `pwd`:/app -w /app phpearth/php:7.4-cli php, é responsável por dizer ao Docker para criar um contêiner utilizando a imagem phpearth/php:7.4-cli e executar o binário php.

Ele ainda diz que o contêiner deve executar de forma interativa e com acesso ao terminal (-it), que ele seja removido após a execução (–rm), que realize o mapeamento do diretório atual para o diretório /app do contêiner (-v `pwd`:/app) e, por fim, que o binário seja executado a partir do diretório /app (-w /app). A segunda parte, o comando alias php74=’docker run … php’ cria um alias para tornar mais fácil a execução do comando do Docker anterior. Utilizando o alias, a execução ficaria apenas php74 my-php74-script.php.

Para testar se o nosso comando que executa um contêiner Docker com o interpretador do PHP 7.4 funciona corretamente, basta rodar o comando abaixo no seu terminal:

php74 –version

Se o resultado da execução do comando for similar ao texto abaixo, quer dizer que tudo está funcionando corretamente!

PHP 7.4.0alpha1 (cli) (built: Jun 12 2019 21:59:00) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.0alpha1, Copyright (c), by Zend Technologies

Novas funcionalidades do PHP 7.4

Agora que sabemos que o PHP está em evolução constante, que se trata de uma plataforma sólida e robusta, que a próxima versão será lançada em breve (novembro de 2019) e que podemos testá-la facilmente utilizando uma imagem Docker, só nos resta resta saber quais são as novas funcionalidades. Vamos lá?

Typed Properties

As propriedades tipadas ou typed properties é uma das funcionalidades mais esperadas do PHP 7.4. Ela permite a tipagem de propriedades de uma classe e representa uma melhoria no sistema de tipos da linguagem PHP.

class User
{
    public int $id;
    public string $nome;
    private bool $isAdmin = false;
}

O assunto de propriedades tipadas é um pouco extenso. Por este motivo, estou preparando um artigo específico sobre o assunto chamado Propriedades Tipadas no PHP 7.4 que ficará disponível em breve!

Arrow
Functions

As arrow functions é outra funcionalidade muito esperada no PHP 7.4. Ela permite representar uma closure – uma função anônima que possui conhecimento do escopo externo – de uma forma reduzida.

Neste exemplo – até a versão 7.3 – definimos uma closure de forma bastante verbosa e tornando explícito o conhecimento da variável $factor por parte da função.

$numbers = [1, 2, 3, 4, 5];
$factor = 2;
// deve-se deixar claro quais variáveis do escopo
// externo a função terá acesso através de `use`
$newNumbers = array_map(function ($i) use ($factor) {
    return $i * $factor;
}, $numbers);
print_r($newNumbers); // [2, 4, 6, 8, 10]

Essa funcionalidade ajudará a tornar o código mais expressivo, principalmente em situações que se faz o uso regular de funções anônimas. Vale lembrar também que é permitido apenas uma linha em uma arrow function.

Com a nova sintaxe das arrow functions é possível reduzir o boilerplate para a criação de uma closure e o escopo externo é conhecido de forma automática pela função (sem a necessidade do use).

$numbers = [1, 2, 3, 4, 5];
$factor = 2;
// o escopo externo é importado automaticamente para a função
$newNumbers = array_map(fn($i) => $i * $factor, $numbers);
print_r($newNumbers); // [2, 4, 6, 8, 10]

O assunto de arrow functions é um outro assunto interessante que merece um artigo próprio que será publicado dentro de algumas semanas.

Spread
Operator em Arrays

O PHP possui suporte ao argument unpacking desde a versão 5.6 da linguagem. A funcionalidade permite o “desempacotamento” de um array (ou um Traversable) em uma lista de argumentos utilizando o spread operator. Veja o exemplo abaixo:

function sum($a, $b) {
    return $a + $b;
}
// utiliza o spread operator (...) para desempacotar
// um array como uma lista de argumentos
$numbers = [3, 5];
echo sum(...$numbers); // 8

Porém, a utilização do spread operator não era permitido na definição de arrays a partir de outro array. Ao tentar utilizar esta abordagem, o PHP acusará um erro de sintaxe.

// a utilização do spread operator para definir um novo
// array a partir de outro array não é suportado
$someNumbers = [2, 3, 4];
$numbers = [1, ...$someNumbers, 5];
print_r($numbers);
// PHP Parse error:  syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

A partir da versão 7.4 será introduzida a funcionalidade que permite a utilização do spread operator (…) na definição de um array através do unpacking dos valores de outro array ou um Traversable. Veja o exemplo abaixo:

// utiliza o spread operator na definição de um array
// a partir de outro array
$someNames = ['Bob', 'Carol'];
$names = ['Alice', ...$someNames, 'Daniel', 'Elisa'];
print_r($names);
// ['Alice', 'Bob', 'Carol', 'Daniel', 'Elisa'];

Essa funcionalidade ajudará a tornar o código mais expressivo e é mais uma excelente adição para a linguagem. Vale lembrar que esta funcionalidade não está disponível para arrays com chaves em string.

O assunto de spread operator in array expression é um outro assunto interessante que merece um artigo próprio que será publicado dentro de algumas semanas.

Operador de atribuição null coalescing

O PHP possui suporte ao operador null coalesce desde a versão 7.0 da linguagem. A funcionalidade permite verificar se uma variável foi definida e se não é nula. Em caso positivo, utiliza-se o valor da variável para uma atribuição e, caso contrário, utiliza-se um valor padrão.

O exemplo abaixo ilustra como lidávamos com este problema antes da existência dessa funcionalidade.

// $data['name'] = 'John';
// verifica se a variável foi definida utilizando a função isset
$name = isset($data['name']) ? $data['name'] : 'anonymous';
echo $name; // anonymous

Com a introdução do operador ?? ficou muito mais fácil lidar com este problema. O código fica muito mais claro e legível além de ser menos propenso a erros.

// $data['name'] = 'John';
// verifica se a variável foi definida e não é nula
// utilizando o operador null coalesce
$name = $data['name'] ?? 'anonymous';
echo $name; // anonymous

E, como evolução do operador de null coalesce, no PHP 7.4 estará disponível o operador de atribuição null coalesce ??=. Esta funcionalidade é a união do operador de null coalesce com o operador de atribuição.

// verifica se uma variável está definida e não é nula e atribui seu valor
// para si própria e, caso contrário, atribui um valor padrão
$data['comments']['username'] = $data['comments']['username'] ?? 'anonymous';

E, ao utilizar o operador de atribuição null coalesce, é muito mais prático alcançar o mesmo objetivo.

$datOutras
funcionalidades

Muitas outras funcionalidades também importantes foram adicionadas ao PHP 7.4. São elas: FFI (foreign function interface), preloading, numeric literal separator, covariant returns and contravariant parameters, weak references e alguns outras se tornaram obsoletas.

E, como disse anteriormente, este é um artigo vivo e vou escrevendo sobre as novas funcionalidades no decorrer da semana seja como uma seção neste artigo ou como um artigo separado para funcionalidades que mereçam mais destaque.

O que virá no futuro?

Apesar de o PHP 7.4 só ficar “pronto” em novembro de 2019 – o artigo está sendo escrito em junho de 2019 -, o seu desenvolvimento entrará em feature freeze em breve. Isso significa que novas funcionalidades não poderão ser mais adicionadas até o lançamento final ficando apenas permitido correções de bugs.

Isso nos deixa mais confortáveis para conhecer as novas funcionalidades do PHP 7.4 pois sabemos que mais nenhuma será adicionada e nos permite começar a pensar no que virá a ser o PHP 8.0.

Nos canais internos de comunicação sobre o PHP já estão sendo discutidas as novas funcionalidades que virão no PHP 8.0 como a tão esperada JIT ou Just-In-Time Compiler. A compilação just-in-time permite a compilação do um programa em tempo de execução. Para mais informações sobre a implementação veja a RFC sobre JIT.

Conclusão

É importante conhecer como a plataforma e o ecossistema da linguagem PHP evolui. Isso permite que você, como profissional, esteja em alinhamento com futuro da linguagem além de ser um diferencial competitivo.

Conhecer o processo de lançamento e as funcionalidades que estarão disponíveis nas próximas versões do PHP te colocará em uma posição estratégica e te permitirá saber como poderá evoluir sua aplicação e decidir com propriedade a escolha do PHP como plataforma.

E, por fim, te ajudará a ter uma visão de alto nível e a contribuir com a evolução da linguagem.

O Artigo original desse artigo encontra-se no pensandonaweb.com.br e você pode consultar vários outros artigos interessantes neste canal.

Caso você queira fazer um teste gratuito de 30 dias em qualquer plano de hospedagem de sites clique aqui e faça já sua reserva.

0Shares

Deixe um comentário

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

Tem artigo novo todos os dias!

Pesquise o termo que você tem mais interesse, e conheça todos os artigos disponível em nosso blog.

A Hostec é uma agência especializada na criação e hospedagem de sites para pessoas físicas, empresas e profissionais de todo território nacional brasileiro.

Hostec — 2018 – 2024  © Todos os Direitos Reservados

Todo o conteúdo deste site é de uso exclusivo da Hostec – Soluções Digitais. Sendo proibida a reprodução ou utilização de qualquer título, sob as penas da lei brasileira de N° 9.279.
CNPJ/MF: 36.659.609/0001-14