Usando PHP 7

Estou usando PHP 7 tem um tempo já e só tenho uma coisa a falar…

CURTINDO DEMAIS!!!

Não vou escrever sobre as mudanças, até porque já existem vários posts sobre as novas funcionalidades. Só para citar alguns:

O que vou escrever é sobre como instalei e algumas das novidades que já estou usando em projetos pessoais. Mas antes, um adendo: a velocidade do PHP 7 comparado com o PHP 5.6 é notável. Rodei algumas aplicações pesadas e dá para notar a diferença na resposta. E isso sem ligar o cache (nas duas versões).

Deixo alguns links mostrando alguns benchmarks. Alguns apontam o PHP 7 sendo mais veloz que o HHVM, outros o HHVM é mais veloz, mas as diferenças são poucas. Alguns comparam até com Python, Perl e Ruby. Vale a pena ver:

Ok, como instalei o PHP 7 no Ubuntu 15.10? Veja abaixo:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0

Se quiser saber que módulos podem ser instalados:

sudo apt-cache search php7.0

Para saber maiores detalhes, tirei as informações da Digital Ocean.

Agora, o que já estou usando do PHP 7 em projetos pessoais e – como diria Cumpade Washington – “gosto mucho”!!

Agrupamento de use

Tem me poupado escrever várias linhas de use num arquivo. Interessante, mas algo não tão importante!

use App\Entity\{Printer, Job};
use App\PrinterManager\{UnixPrinterManager, WindowsPrinterManager, MacOSPrinterManager};

Scalar Type Hint e Return Type

Isso tem sido bastante legal de usar!! Informar o tipo dos parâmetros em métodos de Classes, Interfaces e Traits, e os tipos de retorno tem sido algo libertador! 😀 Ajuda bastante na definição e deixa o código mais autoexplicativo. Ainda pretendo misturar isso com Exceções em tempo de execução para tratar tipos diferentes enviados aos métodos ou tipos retornados diferentes (ainda não usei, por isso não está aqui).

interface PrinterManagerInterface
{

    const PORTRAIT = 100;
    const LANDSCAPE = 101;

    public function printFile(string $filename, int $copies = 1, string $pages = 'all', int $orientation = self::PORTRAIT): Job;

    public function listPrinters(): array;

    public function listJobs(): array;

    public function listJobsFromPrinter(string $printer): array;

    public function cancelJob(int $jobid): bool;

}

Lembrando que, para usar esta funcionalidade, precisa declarar a diretiva declare(strict_types=1) no PHP. De prefência, no frontcontroller.

Null Coalescing Operator

Esse tinha que usar!!! Em vez daquele negócio chato de usar:

$printer = isset($_GET['printer']) ? $_GET['printer'] : 'default';

Algo mais simples:

$printer = $_GET['printer'] ?? 'default';

Claro que alguns frameworks já deixavam as coisas mais fáceis, colocando um parâmetro em métodos de objetos request que dava a opção de setar um valor default. Mas internamente, os frameworks podem fazer isso agora.

Conclusão

Ainda estou usando poucas coisas da versão 7. Mas está bem divertido usar tudo. Sem falar de coisas de versões anteriores que estou usando também nesses projetos, como Traits,Generators, constantes de array, funções variádicas, ::class, finally e sintaxe de array curta ([1, 2, 3]). Também muito bom de usar, principalmente os Generators, que diminui bastante a memória do uso do PHP, dependendo da quantidade de dados manipulados. Esses ficam pra um outro post. Até porque ficou uma dúvida de quando usar ou não usar Traits – a discussão vai dar treta!!

Valeu e espero que tenha ajudado um pouco a incentivar o uso da nova versão.

Deixe uma resposta

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