Back-End

7 mar, 2018

PHP Experience 2018: PHP fora da Web

Publicidade

A sala Assembly recebeu em seu palco, Vinícius Campitelli, Lead Developer da MT4 Tecnologia e @MediaPost. Deu início a sua palestra fazendo uma breve apresentação sobre a própria carreira.

A palestra foi dividida em três partes.

  1. Scrips CLI: lidando com argumentos, streams e roteamento de comandos
  2. Robôs: gerenciando início e termino de robos, usando pcntl ou pthreads
  3. Reutilização: criando códigos que rodem em mais de um ambiente

“Antes de fazer qualquer coisa, em qualquer linguagem, pense: Essa é a melhor ferramenta que eu tenho? Essa é a melhor solução para meu problemas?”

Para dar ritmo à palestra,

Argumentos

As variáveis $argc e $argv guardam informações sobre os argumentos do script. Sendo o $argv um array com argumentos passados, sendo que o indice 0 contém o nome do script invocado.

getopt()

Lê os argumentos passados na linha de comando. As opções podem ser:

  • Caracteres individuais: não aceitam valores
  • Caracteres seguidos por um dois-pontos: valor obrigatório
  • Caracteres seguidos por dois-ponto: valor opcional

I/O Streams

Uso das funções fopen, fgets, fputs, stream_get_line e diversas outras. Disponibilização das constantes STDIN, STDOUT, STDERR.

Streams

Uso de funções como stream_context_create, stream_copy_to_stream, stream_filter_append, entre outras.

Roteamento de comandos

Organiza seu script para que ele seja modular. Crie estrutura de controllers para facilitar a manutenção.

O palestrante ainda passou rapidamente pelas bibliotecas: Zend/Console, Symfony, Laravel Zero, CLimate, Aura.Cli, CliFramework e falou da capacidade de mapeamento e facilidade de configuração da biblioteca.

Gerenciador de robôs

Um robô executa ações em background. Para iniciar, terminar e acompanhar a execução. ou você pode ter daemons “auto-executáveis” – por exemplo, diretamente via cron.

  • pcnt: Extensão Process Control
  • Fluxo simples de execução utilizando pcntl_fork()
  • Fluxo simples de execução utilizando pcntl_waitpid()
  • Fluxo simples de execução utilizando sinaisn para lidar com eventos externos

Falou um pouco sobre a classe Thread deve implementar o método run() e três pontos de atenção importantes foram listados durante a apresentação:

  • Tenha cuidado ao realizar operações atômicas (métodos, synchronized, notify e wait)
  • Nem toda tarefa ganha performance ao ser dividida em threads
  • Não se esqueça de aguardar as threads terminarem (join)

Boas práticas para que os códigos rodem tanto na web quanto em outros ambientes:

  • PHP CodeSniffer: Detecta e corrige violações de acordo com um padrão de regras (por exemplo, PSR-2)
  • PHP Mess Detector: analisa diversos aspectos como variáveis desnecessárias, códigos muito complexos, etc
  • SOLID: cinco princípios para deixar softwares mais entendíveis, flexíveis e de fácil manutenção

Vinícius falou sobre as configurações de ambientes, gestão e injeção de dependências, muito elogiados por ele. Para encerrar, ele presentou um exemplo de uso de threads de uma maneira bastante descontraída, mas que agradando muito e levando o público presente, que o aplaudiu durante a demonstração.