Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPStan - Analisador Estático

Jonata Weber
September 14, 2018

PHPStan - Analisador Estático

Vamos falar sobre o PHPStan, um analisador estático PHP que tem como finalidade encontrar possíveis bugs, defeitos e inconsistências antes de executar o seu código. Ele ajudará você e o seu time a ter um código mais consistente e seguro.

Jonata Weber

September 14, 2018
Tweet

More Decks by Jonata Weber

Other Decks in Programming

Transcript

  1. PHPStan
    Ferramenta de Análise Estática
    /** @author Jonata Weber */

    View Slide

  2. @JonataWeber

    View Slide

  3. @JonataWeber
    phpba.com.br
    telegram.me/phpba

    View Slide

  4. Linguagem
    Compilada vs Interpretada

    View Slide

  5. Linguagens Interpretadas
    Linguagem
    Pronto para Rodar!
    Código de Máquina
    Máquina Virtual
    "Interpretação"

    View Slide

  6. Linguagens Interpretadas
    Linguagem
    Pronto para Rodar!
    Código de Máquina
    Máquina Virtual
    "Interpretação"
    Analisador Léxico
    +
    Análise Sintática
    +
    Análise Semântica

    View Slide

  7. Linguagens Compiladas
    Linguagem
    Código de Máquina
    Pronto para Rodar!
    "Compilação"

    View Slide

  8. Linguagens Compiladas
    Linguagem
    Código de Máquina
    Pronto para Rodar!
    "Compilação"
    Analisador Léxico
    +
    Análise Sintática
    +
    Análise Semântica

    View Slide

  9. Interpretada - Vantagens
    ● Independência de plataforma
    ● Maior produtividade
    ● Simples modelo de execução
    ● Feedback mais rápido

    View Slide

  10. Mas tem desvantagens!

    View Slide

  11. class Foo
    {
    public function bar(\DateTimeImutable $date)
    {
    echo $date->format('d/m/Y');
    }
    }
    Encontre o Erro!

    View Slide

  12. class Foo
    {
    public function bar(\DateTimeImmutable $date)
    {
    echo $date->format('d/m/Y');
    }
    }
    Encontre o Erro!

    View Slide

  13. E o interpretador, acharia esse erro?

    View Slide

  14. E o interpretador, acharia esse erro?
    NÃO!

    View Slide

  15. E se PHP fosse compilado...

    View Slide

  16. Line 7 Parameter $date of method
    App\Foo::bar() has invalid typehint
    type DateTimeImutable.
    Line 9 Call to method format() on an
    unknown class DateTimeImutable.
    Teríamos esses erros!

    View Slide

  17. E alguns desses erros seriam evitados...
    ● Erros de sintaxe;
    ● Tipo de variável inválida;
    ● Tipo do retorno do método inválido;
    ● Método indefinido;
    ● Número de argumentos passados ao método;
    ● Classes inexistentes;
    ● Variáveis não utilizadas;
    ● Métodos não utilizados;
    ● etc...

    View Slide

  18. View Slide

  19. Escreva menos testes unitários!
    (e foque no que realmente importa)

    View Slide

  20. vs PHPStan

    View Slide

  21. PHPStan é rápido.
    (6000 files, 600k LOCs em ~1 min)

    View Slide

  22. PHPStan é extensível.
    __get, __set, __call

    View Slide

  23. Extensões Oficiais
    ● Doctrine
    ● PHPUnit
    ● Nette Framework
    ● Dibi - Database Abstraction Library
    ● PHP-Parser
    ● beberlei/assert
    ● webmozart/assert
    ● Symfony Framework
    ● Mockery

    View Slide

  24. Extensões NÃO Oficiais
    ● Phony
    ● Prophecy
    ● Laravel
    ● myclabs/php-enum

    View Slide

  25. Escolha o seu nível.
    $levels =
    [0, 1, 2, 3, 4, 5, 6, 7];

    View Slide

  26. DEMO.

    View Slide

  27. Obrigado!
    Twitter: @JonataWeber
    VIVA O FUTURO DO TRABALHO.
    SEJA IMPULSER
    https://impulser.me/2DetPta

    View Slide

  28. Referências
    https://medium.com/@ondrejmirtes/whats-new-in-phpstan-0-10-bbbe896cc02e
    https://twitter.com/OndrejMirtes
    https://www.phparch.com/2018/04/testing-strategy-with-the-help-of-static-analysis/
    https://medium.com/@ondrejmirtes/phpstan-2939cd0ad0e3
    https://github.com/phpstan/phpstan

    View Slide