Comunidade PHP Com Rapadura

Grupo de desenvolvedores PHP do Ceará, formados através de uma ligação doce, como a rapadura e o café.

O que há de novo no PHP 7.2

 

Atualmente no RC3, o PHP 7.2 está previsto para ser lançado em 30 de novembro. O novo lançamento vem com novos recursos, funções e melhorias que nos permitirão escrever melhor código. Nesta publicação, apresentarei alguns dos recursos de linguagem mais interessantes que vem com o PHP 7.2.

Você pode ver a lista completa das próximas mudanças na página Solicitações para comentários.

Melhorias no Core

Declarações de tipo de argumento

Desde o PHP 5, podemos especificar na declaração de uma função o tipo de argumento que se espera que seja passado. Se o valor dado for de um tipo incorreto, o PHP lança um erro.

As declarações de tipo de argumento (também conhecidas como type hints) especificam o tipo de uma variável que deverá ser passada para uma função ou método de classe.

Aqui está um exemplo:

 

 

Neste código, a função de teste espera uma instância de MyClass. Um tipo de dados incorreto resultaria no seguinte erro fatal:

Uma vez que os type hints no PHP 7.2 podem ser usadas com o tipo de dados do objeto, essa melhoria permite declarar um objeto genérico como argumento de uma função ou método. Aqui está um exemplo:

 

 

Neste exemplo, chamamos a função de teste duas vezes, passando um objeto diferente em cada chamada. Isso não foi possível em versões anteriores do PHP.

Docker commands
Testing type hints with PHP 7.0 and PHP 7.2 in Docker

 

Declarações de tipo de retorno de objeto

Se as declarações do tipo de argumento especificar o tipo esperado para os argumentos de uma função, as declarações de tipo de retorno especificam o tipo esperado do valor de retorno.

As declarações de tipo de retorno especificam o tipo de uma variável que deve ser retornada por uma função.

Com o PHP 7.2, podemos usar declarações de tipo de retorno para o tipo de dados do objeto. Aqui está um exemplo:

 

Versões anteriores do PHP lançam o seguinte erro fatal:

 

Claro, no PHP 7.2 este código echoes ‘Hello World’.

Parâmetro Type Widening

O PHP atualmente não permite nenhuma variância de tipos de parâmetros entre as classes filho e suas classes ou interfaces pai. O que isso significa?
Considere o seguinte código:

Aqui omitimos o tipo de parâmetro na subclasse. No PHP 7.0 este código produz o seguinte aviso:

Com o PHP 7.2, podemos omitir um tipo em uma subclasse sem quebrar qualquer código. Esta proposta nos permitirá atualizar classes para usar type hints em bibliotecas sem ser necessário atualizar todas as subclasses.

Trailing commas na lista da syntax

Uma trailing commas após o último item em arrays é uma sintaxe válida em PHP, e às vezes é encorajada para adicionar facilmente itens novos e evitar erros de análise devido a uma comma em falta . Com o PHP 7.2, podemos usar as trailing commas em namespaces agrupados.

Veja Trailing Commas na Lista da Syntax para uma visão mais detalhada nesta RFC e alguns exemplos de código.

 

Melhorias de segurança

Argon2 no password hash

Argon2 é um algoritmo de hash poderoso que foi selecionado como o vencedor do 2015 no Password Hashing Competition, e o PHP 7.2 irá trazê-lo para nós como uma alternativa segura para o algoritmo Bcrypt.

A nova versão do PHP apresenta a constante PASSWORD_ARGON2I, que agora pode ser usada nas funções password_ *:

Ao contrário do Bcrypt, que leva apenas um cost factor, o Argon2 possui três cost factors expresso da seguinte forma:

  • Um memory cost que define o número de KiB que deve ser consumido durante o hashing (os valores padrões são 1 << 10 ou 1024 KiB ou 1 MiB)
  • Um time cost que define o número de iterações do algoritmo de hash (padrão de 2)
  • Um parallelism factor, que define o número de threads paralelos que serão usados ​​durante o hashing (padrão para 2)

Três novas constantes definem cost factors padrão:

  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
  • PASSWORD_ARGON2_DEFAULT_TIME_COST
  • PASSWORD_ARGON2_DEFAULT_THREADS

Aqui está um exemplo:

Consulte Argon2 Password Hash para obter mais informações.

Libsodium como parte do PHP Core

A partir da versão 7.2, o PHP inclui a Sodium library no core. A Libsodium é uma biblioteca de cross-platform e cross-languages ​​para criptografia, descriptografia, assinaturas, password hash e muito mais.

A biblioteca estava anteriormente disponível através da PECL.

Para obter uma lista documentada das funções Libsodium, consulte o Guia de Iniciação Rápida da biblioteca.
Veja também o PHP 7.2: A Primeiro Linguagem de Programação à Adicionar Criptografia Moderna à sua Biblioteca Padrão.

Deprecations(Funções Depreciadas)

Aqui está uma lista de funções e recursos depreciados no PHP 7.2 que serão removidos no final desse PHP 8.0:

A função __autoload foi substituída por spl_autoload_register em PHP 5.1. Agora, um aviso de desaprovação seria lançado quando encontrado durante a compilação.

A variável $php_errormsg é criada no escopo local quando um erro não fatal é lançado. Com o PHP 7.2 error_get_last e error_clear_last devem ser usados ​​em vez disso.

create_function () permite a criação de uma função com um nome de função gerado, uma lista de argumentos e código de corpo fornecido como argumentos. Devido a problemas de segurança e mau desempenho, foi marcado como obsoleto e, em vez disso, o uso de enclosures é encorajado.

mbstring.func_overload inicia uma configuração inserida para um valor diferente de zero foi marcada como depreciada.

(unset) cast é uma expressão que sempre retorna nulo e é considerada inútil.

parse_str () analisa uma string de consulta em uma matriz se o segundo argumento for fornecido ou na tabela de símbolos locais se não for usada. Como a configuração dinâmica de variáveis no escopo da função é desencorajada por razões de segurança, o uso de parse_str () sem o segundo argumento lançará um aviso de depreciada.

gmp_random () é considerado dependente da plataforma e será depreciado. Use gmp_random_bits() e gmp_random_rage() em vez disso.

each() é usado para iteração em uma matriz como o foreach(), mas foreach() é preferível por vários motivos, incluindo ser 10 vezes mais rápido. Agora, um aviso de depreciado será lançado na primeira chamada em um loop.

A função assert() verifica a assertion dada e toma as ações apropriadas se o resultado for FALSE. O uso do  assert() com argumento de string agora está depreciado à medida que abre uma vulnerabilidade RCE. A opção zend.assertion ini pode ser usada para evitar a avaliação de assertion expressions.

$errcontext é uma matriz contendo as variáveis ​​locais existentes no momento em que um erro é gerado. É passado como o último argumento para manipuladores de erros configurados com a função set_error_handler().

O que o PHP 7.2 significa para usuários do WordPress?

De acordo com a página oficial do WordPress Stats, a partir desse momento, apenas 13% dos usuários do WordPress atualizaram para o PHP 7. E apenas 3,6% estão usando o PHP 7.1. Você pode ver que uma grande maioria de usuários, mais de 40%, ainda estão sendo executados no PHP 5.6. O que é ainda mais assustador é que mais de 42% dos usuários estão usando versões PHP sem suporte. A partir de dezembro de 2016, o WordPress.org realmente conseguiu atingir sua recomendação oficial para usuários de PHP 5,6 para PHP 7 ou superior.

WordPress PHP 7.1 stats
WordPress PHP 7.1 stats

Os números acima são especialmente desencorajantes provenientes do ponto de vista do desempenho, já que o PHP 7 mostrou ser significativamente mais rápido. Aqui estão algumas estatísticas:

  • Oficial PHP benchmarks mostra que o PHP 7 permite ao sistema executar o dobro de pedidos por segundo em comparação com o PHP 5.6, em quase metade da latência.
  • Kinsta executou seus próprios benchmarks de desempenho PHP 5.6 vs PHP 7 vs HHVM. E de forma semelhante aos benchmarks acima, eles viram que o PHP 7 poderia executar quase três vezes mais transações por segundo em comparação com PHP 5.6.
  • Christian Vigh também publicou uma comparação de desempenho do PHP em que ele descobriu que o PHP 5.2 era 400% mais lento que o PHP 7.

Eva2000 também executou um teste de carga com o WordPress 4.8, comparando PHP 5.6, 7, 7.1 e 7.2 alfa e os resultados foram promissores!

Muitos são lentos para atualizar simplesmente por causa do tempo envolvido com o teste de todos os novos plugins e temas de terceiros para garantir que eles funcionem corretamente. Mas muitas vezes, isso se resume ao que eles simplesmente não o fizeram ainda. Não tem certeza de qual versão do PHP você está executando? Uma das maneiras mais fáceis de verificar é usar uma ferramenta como o Pingdom ou o Google Chrome Devtools. O primeiro cabeçalho de solicitação HTTP geralmente mostrará a versão.

Check version of PHP
Check version of PHP

Isso depende do host não modificando o valor do cabeçalho X-Powered-By. Se o fizerem, você pode não ver sua versão do PHP, caso em que você precisaria carregar um arquivo via FTP. Ou você sempre pode chegar ao seu host e perguntar.

Updating para PHP 7.2

O PHP 7.2 ainda não está completo, mas você pode começar a testar. Você pode testar seu site WordPress localmente ou verificar seus scripts em um ambiente como o Docker, que permite testar diferentes versões do PHP a partir da linha de comando.

Ou você pode utilizar um ambiente de teste, pois isso se assemelhará mais a um site de produção ao vivo. A Kinsta lançará o PHP 7.2 para todos os clientes no momento em que for lançado, estável e testado em seu ambiente. Você pode facilmente criar um ambiente de teste com um único clique.

Test PHP 7.2 in staging environment
Test PHP 7.2 in staging environment

Simplesmente com um clique, altere o mecanismo PHP para o site de teste em “Ferramentas” e você pode começar a testar para garantir a compatibilidade de seus complementos e temas de terceiros. Depois de confirmar tudo, você pode mudar seu site de produção para o PHP 7.2 ou dar um push em seu site de teste para o modo live.

Change to PHP 7.2
Change to PHP 7.2

Conclusões

Você está pronto para mudar para o PHP 7.2? Espero que, até agora, você tenha feito a transição para o PHP 7. Pelo menos, agora não é um bom momento para começar a testar. Então, atualize seus scripts, verifique seu código e avise-nos sobre suas primeiras impressões do PHP 7.2.

20 Fatos interessantes sobre PHP que todos os desenvolvedores devem saber

Fatos interessantes sobre PHP 1. O PHP originalmente representava a Página Pessoal. 2. O PHP que agora é oficialmente conhecido como “Pré-processador de hipertexto” foi lançado no ano de 1995. 3. Inicialmente escrito como um conjunto de Common Gateway Interface (CGI) em ‘C’ (1994). 4. O PHP foi originalmente projetado para substituir um conjunto de…

Seis paradigmas de programação que mudarão a forma como você pensa sobre a codificação

De vez em quando, eu tropeço em uma linguagem de programação que faz algo tão diferente que muda como eu penso sobre a codificação. Nesta publicação, quero compartilhar algumas das minhas descobertas favoritas. Esta não é a postagem do Blog da vovó “programação funcional que vai mudar o mundo!” : esta lista é muito mais…

PHPeste Fortaleza 2017

PHPeste é uma conferência de PHP organizada pelas comunidades “cabra da peste” do nordeste brasileiro. O evento já passou por João Pessoa (PB), Salvador (BA), e agora é a vez de Fortaleza(CE) sediar um dos maiores eventos de PHP do Brasil. Nessa essa edição, o evento terá início em 06 de outubro, e encerrará no…