O que o PHP 7.4 significa para você?
O PHP evolui continuamente e eles lançaram sua última atualização do PHP 7.4, cheia de novos recursos. Como já provamos nas versões anteriores do PHP 7 - o desempenho e a velocidade continuam avançando. Um dos novos recursos mais interessantes é o
pré -
carregamento . Ele acelera a execução do script e introduz a capacidade de ter um código mais rápido e limpo, devido às linhas comuns de código simplificadas.
Os responsáveis ​​pelo PHP levaram em consideração os comentários e solicitações da audiência e os responderam perfeitamente. Desde então, eles mudam continuamente o código para serem mais intuitivos e mais confortáveis ​​para alternar entre linguagens de programação.
O PHP é usado em mais de 78,9% de todos os sites. Segundo a
W3techs , os sites mais populares que usam PHP são Wikipedia, Pinterest e Facebook, para citar alguns.
Se olharmos explicitamente para sites WordPress executando PHP, comparando o PHP 5 e 7, podemos ver um aumento de velocidade dupla. Os sites com WordPress ganham mais ao usar a versão mais recente do PHP.

Este gráfico ilustra a verdade sobre sites que usam ativamente PHP. São
40 mln. sites ao vivo o suficiente para chamar sua atenção? É assim que muitos estão usando PHP no momento. Além disso, o PHP 7.4 já está apresentando melhores resultados de teste que o PHP 7.3, com melhor desempenho e outras atualizações de qualidade de vida.
O gráfico abaixo mostra o
teste de benchmark geral nas versões novas e antigas do PHP. Alguns dos critérios testados foram facilidade de uso, velocidade e desempenho, entre outros.

O que há de novo no PHP 7.4?
Desde 2016, o PHP7 lança atualizações anuais sem falhas. A cada ano, eles oferecem novos recursos, adições e a possibilidade de escrever um código mais limpo, que torna o idioma mais confiável e fácil de usar para quem o executa em seus sites.
Vamos nos aprofundar e dar uma olhada em algumas das mudanças que foram feitas com a adição do PHP 7.4. Para uma lista completa, confira o changelog
aqui .
Pré-carregamento
Vamos falar sobre código. Ao usar uma estrutura ou bibliotecas, seus arquivos precisam ser carregados e vinculados a cada solicitação. O pré-carregamento é quando você pode carregar estruturas e bibliotecas no OPCache. Ele permite que o servidor carregue os arquivos PHP e os armazene na memória durante a inicialização e os disponibilize para solicitações futuras. Fale sobre fazer as coisas correrem rápido!
O pré-carregamento é executado por uma diretiva
php.ini especÃfica:
opcache.preload . Este possui o compilador de scripts PHP e é executado quando o servidor é iniciado. Também pode ser usado para pré-carregar mais arquivos e optar por incluÃ-los ou compilá-los.
Isso é demais. No entanto, se a origem dos arquivos pré-carregados for alterada, o servidor deverá ser reiniciado. Os arquivos pré-carregados também permanecem em cache na memória do OPCache para sempre.
No entanto, esses arquivos pré-carregados continuarão disponÃveis para solicitações futuras, caso você precise usá-los novamente.
Operador de propagação em expressões de matriz
Quando o PHP 5.6 foi lançado, o PHP começou a suportar a descompactação de argumentos (operador de propagação), mas agora, com a 7.4, podemos usar esse recurso com uma expressão de matriz. A descompactação de argumentos é uma sintaxe para descompactar matrizes e Traversables em listas de argumentos. E, para fazer isso, ele só precisa ser precedido por ... (3 pontos). É isso.
Vejamos este exemplo:
$animals = ['dog', 'cat']; $animalkingdom = ['lion', 'elephant', ...$animals, 'giraffe'];
Agora podemos expandir uma matriz de qualquer lugar que desejemos em outra matriz, simplesmente usando a sintaxe do operador de propagação.
Aqui está um exemplo mais longo:
$num1 = [1, 2, 3]; $num2 = [...$num1];
Não apenas isso, mas você também pode usá-lo em uma função. Confira este exemplo:
function getNum() { return ['a', 'b']; } $num6 = [...getNum(), 'c'];
Além disso, agora você pode descompactar matrizes e geradores retornados por uma função diretamente em uma nova matriz.
Um exemplo de código ficaria assim:
function getAnimals(){ return ['dog', 'cat', 'elephant']; } $num1 = [...getAnimals(), 'lion', 'tiger', 'giraffe'];
E com o PHP 7.4, ele imprimiria:
array(6) { [0]=> string(3) "dog" [1]=> string(3) "cat" [2]=> string(8) "elephant" [3]=> string(4) "lion" [4]=> string(5) "tiger" [5]=> string(7) "giraffe" }
Com essa nova expressão de matriz, os operadores de spread devem ter um desempenho muito melhor em relação ao 7.3 array_merge. Isso ocorre porque o operador spread é uma estrutura de linguagem, enquanto array_merge é uma função. Também porque o operador spread suporta objetos implementando traversable e array_merge suporta apenas matrizes.
Algumas coisas importantes a serem observadas, você só pode usar matrizes indexadas, pois as chaves de sequência não são suportadas. Se usado, um erro recuperável será exibido na tela, assim que uma chave de cadeia for encontrada.
Outro benefÃcio glorioso para o 7.4 é a remoção do array_merge. Diga adeus à temida mudança de Ãndice!
Por exemplo, vejamos essa longa matriz de mesclagem abaixo:
$array = ['banana, 'orange']; $array[2] = 'orange'; $array[1] = 'apple'; //shifting var_dump($array); // prints array(3) { [0]=> string(6) "banana" [1]=> string(5) "apple" [2]=> string(6) "orange"
Outro benefÃcio do 7.4 é usar a função de gerador. Uma função de gerador funciona exatamente como uma função normal, exceto que, em vez de retornar um valor, uma
função de gerador gera tantos valores quanto necessário.
Confira o código de exemplo abaixo:
function generator() { for ($i = 3; $i <= 5; $i++) { yield $i; } } $num1 = [0, 1, 2, ...generator()];
Referências fracas
Agora, o PHP 7.4 tem uma classe WeakReference, que não deve ser confundida com a classe
WeakRed ou a extensão
Weakref .
As WeakReferences permitem que o programador recupere uma referência a um objeto. Isso é útil porque não impede que o objeto seja destruÃdo. Eles são úteis para implementar o cache como estruturas.
WeakReference { public __construct ( void ) public static create ( object $referent ) : WeakReference public get ( void ) : ?object }
Parâmetros Contravariantes e Devoluções Covariantes
Atualmente, o PHP usa principalmente tipos de parâmetros invariantes e tipos de retorno. Ou seja, se um método tiver um parâmetro ou tipo de retorno X, o parâmetro de subtipo ou tipo de retorno também deverá ser do tipo
X.Agora, com o PHP 7.4, ele propõe permitir
covariância (ordenada de especÃfica para genérica) e
contravariante (reverter a ordem) nos tipos de parâmetro e retorno.
Aqui está um exemplo de ambos:
Exemplo de tipo de retorno covariável:
interface Factory { function make(): object; } class UserFactory implements Factory { function make(): User; }
Exemplo de tipo de parâmetro contravariante:
interface Concatable { function concat(Iterator $input); } class Collection implements Concatable {
Propriedades digitadas 2.0
Desde o PHP 5, as dicas de tipo têm sido um recurso disponÃvel, permitindo que você especifique o tipo de variável que deve ser passado para uma função ou classe. Nas migrações do PHP 7.2, a adição do tipo de dados do objeto deu esperanças de que mais estivessem disponÃveis no futuro. O futuro é agora.
No novo 7.4, o PHP é capaz de suportar a seguinte lista de tipos:
bool, int, float, string, array, object, iterable, self, parent any class or interface name ?type // where "type" may be any of the above
Observe que o tipo
pai pode ser usado em classes e não precisa ter um pai consistente com o parâmetro e o tipo de retorno.
Além disso, observe que o
cancelamento e a
chamada não são suportados.
O vácuo foi removido porque não era útil e tinha semântica pouco clara;
Pode ser chamado , porque seu comportamento depende do contexto.
Vamos conferir mais alguns exemplos.
Aqui está uma classe, escrita para o PHP 7.3:
class User { private $id; private $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } public function getId(): int { return $this->id; } public function setId(int $id): void { $this->id = $id; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } }
No PHP 7.4, sem sacrificar nenhuma segurança de tipo, uma classe agora pode ser escrita tão simples quanto:
class User { public int $id; public string $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } }
Aqui estão alguns exemplos de todos os tipos que o 7.4 suporta agora:
class Example { public int $scalarType; protected ClassName $classType; private ?ClassName $nullableClassType;
Funções de seta 2.0
Funções anônimas no PHP tendem a ser longas e extensas, mesmo quando estão executando apenas operações simples. Isso ocorre parcialmente devido a uma grande quantidade de clichê sintático e parcialmente devido à necessidade de importar manualmente as variáveis ​​usadas.
Isso torna o código que usa fechamentos simples confuso para ler e ainda mais difÃcil de entender.
Vamos dar uma olhada em algum código que você usaria no PHP 7.3:
function array_values_from_keys($arr, $keys) { return array_map(function ($x) use ($arr) { return $arr[$x]; }, $keys); }
Agora, aqui está a sintaxe mais concisa do PHP 7.4:
function array_values_from_keys($arr, $keys) { return array_map(fn($x) => $arr[$x], $keys); }
Portanto, as funções de seta agora têm este formato simples:
fn(parameter_list) => expr
Abaixo você pode ver um exemplo de duas funções $ fn1 (7.3) e $ fn2 (7.4) lado a lado. Eles têm o mesmo resultado, mas parecem diferentes:
$y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; };
Isso também funcionará se as funções de seta estiverem aninhadas:
$z = 1; $fn = fn($x) => fn($y) => $x * $y + $z;
Aqui, a função externa captura
$ z . Então, a função interna também captura $ z da função externa. Com 7.4, o escopo externo pode se tornar disponÃvel na função interna. Isso é algo que 7.3 não foi capaz de fazer.
A sintaxe da função de seta permite uma variedade de funções, como variáveis, valores padrão, parâmetros e tipos de retorno, bem como passagem e retorno por referência. Tudo isso mantendo um visual limpo e legÃvel. Abaixo estão todas as funções de seta válidas agora disponÃveis:
fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest;
Uma coisa a notar é que as funções de seta têm a menor precedência. Veja o exemplo:
fn($x) => $x + $y
Deprecações
Há muitas obsoletas acontecendo com a mesclagem para 7.4. A lista a seguir é uma breve visão geral das funções direcionadas à depreciação. Você pode encontrar uma explicação mais detalhada
aqui :
- O tipo real
- Legendas de citações mágicas
- array_key_exists () com objetos
- Filtro FILTER_SANITIZE_MAGIC_QUOTES
- Métodos de exportação de reflexão ()
- mb_strrpos () com codificação como terceiro argumento
- mix de ordem dos parâmetros implode ()
- Desvinculando $ this de fechamentos não estáticos
- Função hebrevc ()
- função convert_cyr_string ()
- função money_format ()
- função ezmlm_hash ()
- r função estore_include_path ()
- allow_url_include ini directiv
Alguns pontos importantes a serem observados são as seguintes deprecações em duas etapas.
Alterando a precedência de um operador de concatenação
Atualmente, a precedência dos operadores '.', '+' And '-' é igual. Qualquer combinação desses operadores será simplesmente resolvida da esquerda para a direita.
Vamos dar uma olhada neste código no PHP 7.3:
echo "sum: " . $a + $b;
No PHP 7.4, '+' e '-' teriam precedência sobre '.' portanto, as adições e subtrações sempre seriam realizadas antes da string. Seria o seguinte:
echo "sum: " . $a + $b;
Esta proposta em duas etapas visa ser menos propensa a erros e mais instintiva. Atualmente, o PHP 7.4 está no primeiro estágio com um aviso de descontinuação de expressões sem parênteses de '+', '-' e '.' Enquanto aguarda a votação / mudança final acontecendo no PHP 8.
Operador ternário associativo de esquerda
Diferentemente da maioria das outras linguagens, o operador ternário no PHP é associativo à esquerda, em vez de associativo à direita. Além de incomum, também é confuso para programadores que alternam entre idiomas diferentes. O PHP 7.4 propõe remover a associatividade esquerda e requer o uso de parênteses.
Vamos dar uma olhada no código abaixo:
return $a == 1 ? 'one' : $a == 2 ? 'two' : $a == 3 ? 'three' : $a == 4 ? 'four' : 'other';
Na maioria dos outros idiomas, seria interpretado como:
return $a == 1 ? 'one' : ($a == 2 ? 'two' : ($a == 3 ? 'three' : ($a == 4 ? 'four' : 'other')))
Enquanto em PHP, ele é interpretado como:
return ((($a == 1 ? 'one' : $a == 2) ? 'two' : $a == 3) ? 'three' : $a == 4) ? 'four' : 'other';
Isso pode levar a erros, porque geralmente não é o que se pretendia.
Através de uma proposta em duas etapas, o PHP 7.4 implementou o uso explÃcito de parênteses como um aviso de descontinuação e, esperançosamente, executará um erro de tempo de execução de compilação em versões futuras.
Conclusão
Bem na hora das festas, o PHP 7.4 traz novos recursos e melhorias na qualidade de vida de todos os desenvolvedores de PHP.
Os sites WordPress definitivamente se beneficiarão dessas melhorias e seus usuários podem esperar tempos de execução mais rápidos e menos uso de memória ao usar o PHP 7.4 em comparação com as versões anteriores.
Com a adição de declarações de tipo de propriedade de primeira classe e dicas de tipo, funções de mesclagem de setas e velocidade ridiculamente melhor, o 7.4 certamente melhorará a velocidade e a qualidade do seu fluxo de trabalho.