
Quando as pessoas discutem mudanças no PHP7, a coisa mais comum é ouvir um mecanismo significativamente aprimorado, que possui maior velocidade de execução e significativamente menos memória ao comparar aplicativos PHP comuns como Drupal, WordPress e MediaWiki.
Não me interpretem mal, é claro que isso é ótimo! Consegui portar vários aplicativos CodeIgniter herdados para o PHP7 e obter um desempenho muito melhor com algumas alterações na base de código. No entanto, o PHP7 também adiciona vários novos recursos que podem ajudar a otimizar o código existente ou melhorar a qualidade de escrever um novo código. Aqui descrevi vários dos meus recursos selecionados.
Parâmetro escalar e retorno do tipo declarado
O PHP tinha declarações de tipo até a versão 7, mas estava limitado apenas a objetos e matrizes. O PHP7 agora oferece suporte para todos os tipos escalares e oferece duas declarações de tipos diferentes.
Forçado:
é o tipo padrão de declaração e significa simplesmente que o tempo de execução do PHP tentará converter valores quando necessário. Pegue, por exemplo, o seguinte código.
<?php function reverseString(String $str) : String { return strrev($str); } print(reverseString(1234));
Indicamos que o parâmetro $str
deve ser do tipo String
e que o valor de retorno também deve ser do tipo String
. Portanto, quando passamos o número 1234, ele é traduzido à força para a cadeia "1234" e traduzido sem erros.
Estrito:
O segundo tipo estrito é ativado usando o sinalizador adicionado no início de cada arquivo. Quando ativado, o intérprete não lança o tipo, como no exemplo acima, responde com um erro e interrompe o script.
<?PHP declare(strict_types = 1); function reverseString(String $str): String { return strrev($str); } print (reverseString(1234));
Adicionando uma única declare
declaração no início do arquivo, no mesmo código de antes, agora recebemos a seguinte mensagem de erro:
Erro fatal: TypeError não capturado: o argumento 1 passado para reverseString () deve ser do tipo string, número inteiro fornecido
Uma pequena adição: quando você ativa o modo estrito, isso também se aplica às funções internas e às funções PHP carregadas a partir de extensões.
Operador nulo ??
Diferente de algumas linguagens, nas quais você pode usar o nome da variável como uma expressão na expressão if
e assumir com segurança que se o valor não estiver definido ou vazio, o valor será false
, o PHP lançará um erro sobre uma variável indefinida, índice etc. Isso o torna um código regular muito detalhado usando if
que outros idiomas, como no exemplo a seguir.
<?php if(!isset($_GET['key'])) { $key = 'default-value'; } else { $key = $_GET['key']; }
Mesmo ao usar o operador ternário, a função isset
é necessária. Com o novo operador nulo ??
você pode facilitar bastante o código:
<?PHP $key = $_GET['key'] ?? 'default_value';
Esse uso é ainda mais eficiente no encadeamento de casos que exigem uma ou mais if
.
<?php if (isset($_GET['key']) { $key = $_GET['key']; } else if(isset($_POST['key'])) { $key = $_POST['key']; } else { $key = 'default value'; }
Pequena adição: se você trabalha com JavaScript, pode fazer coisas assim:
const value = 0 || false || 'hello'; console.log(value);
Isso não funcionará no PHP, e um código PHP equivalente definirá o valor como 0, pois o novo operador trabalha apenas com valores null
.
Declarações de uso do grupo
Nas versões anteriores do PHP, era possível importar apenas um elemento (classe, função, constante) de um espaço para nome específico em uma única expressão usando a declaração use. Isso geralmente leva a códigos muito repetidos, como no exemplo abaixo.
<?php use VendorName/LibraryName/ClasName1; use VendorName/LibraryName/ClasName2; use VendorName/LibraryName/ClasName3;
Ao agrupar, as opções acima podem ser abreviadas, como mostrado no exemplo abaixo, o que permite obter um código mais limpo e intuitivo do que é importado e de onde.
<?php use VendorName/LibraryName/{ClasName1, ClassName2. ClassName3};
Matrizes constantes
Constantes nomeadas são uma ferramenta muito valiosa em PHP. Um caso de uso comum é melhorar a legibilidade do código, fornecendo nomes semânticos para dados arbitrários, como cores, valores RGB ou números mágicos em códigos ambíguos e confusos em outros casos.
Qualquer pessoa que trabalhe com PHP há muito tempo provavelmente verá um aplicativo com um arquivo constante (ou mesmo vários arquivos) que contém dezenas, senão centenas de constantes nomeadas, exigindo nomes longos e descritivos para evitar conflitos de nomes.
<?php define('COLOR_RED', '#f44141'); define('COLOR_BLUE', '#4286f4'); define('COLOR_GREEN', '#1ae01e'); define('COLOR_PURPLE', '#f309f7'); define('COLOR_ORANGE', '#ef7700');
As constantes nomeadas, além dos tipos de dados suportados anteriormente, podem ser matrizes indexadas ou associativas. Isso ajudará a agrupar com mais precisão muitas constantes nomeadas que você pode ter em seu aplicativo.
<?php
Conclusão
Existem alguns novos recursos excelentes que não mencionei, como classes anônimas e o operador de nave espacial. Então, definitivamente, confira a documentação do PHP.net para obter mais informações. Obrigado por reservar um tempo para ler tudo isso e por favor, deixe quaisquer perguntas ou comentários abaixo.
obrigado Berez pelos comentários.