PHP
Frameworks
  Augusto Pascutti
@AUGUSTOHP
AUGUSTO@PHPSP.ORG.BR
AGENDA
AGENDA


• PHP

• Frameworks

• Principais   Frameworks PHP
PHP
PHP


• Criado   em 1995

• Versão   atual: 5.3.5

• Software     livre
CRESCIMENTO DO PHP
CRESCIMENTO DO PHP

       1995


              • Versão   1.0

              • Rasmus      Lerdorf

              • PERL

              • Personal   Home Pages
CRESCIMENTO DO PHP

     1998

            • Versão   3.0

            • Zeev     + Andi

            • PHP: Hypertext     Preprocessor

            • Orientação     a Objetos

            • PHPClasses.org
CRESCIMENTO DO PHP

     2000



            • Versão   4.0

            • Zend     Engine

            • Estabelecimento   no mercado
CRESCIMENTO DO PHP

 2004

          • Versão   5.0

          • Zend     Engine 2

          • Novo   modelo de objetos

          • Melhora   na Performance

          • PDO    e SPL
CRESCIMENTO DO PHP

2009


       • Versão   5.3

       • Namespaces, Closures, Garbage
        Collector (Ref. Cicl.), Phar, etc ...

       • Windows++

       • Performance++
CRESCIMENTO DO PHP

 Futuro
          • Versão   5.4 ou 6.0
          • Segurança

          • Traits

          • Type   Hints
          • “Briguinhas”:

           • Annotations

           • Unicode
E QUANTO AO
    SEU
CRESCIMENTO ?
ONDE VOCÊ ESTÁ?

                                  Sobrinho


                                             • Copiou,

                                             • Colou,

                                             • Funcionou?

                                             • Beleza!
Autor: Flávio Gomes da Silva Lisboa
ONDE VOCÊ ESTÁ?

   Júnior



            • Pouca   experiência

            • Muita   força de vontade

            • Curiosidade
ONDE VOCÊ ESTÁ?

   Pleno



           • Conhecem    suas limitações

           • Buscam   soluções

           • Aprendem   com seus erros
ONDE VOCÊ ESTÁ?

Sênior


         • Segurança   em seu trabalho

         • Conhecem     as soluções

         • Muita   experiência

         • Aprendem     com erros alheios
ONDE VOCÊ ESTÁ?

Chuck Norris



               • Forçam   o desenvolvimento do PHP

               • Contribuem

               • Distribuem
ONDE VOCÊ ESTÁ?

Core developers
                  • Fazem   sua própria cerveja
                  • Não   dormem
                  • Criam   o que demoramos a aprender
                  • Estão   sempre dispostos a ajudar
POR QUE ELE TA FALANDO ISSO ?
SÓ VOCÊ
 PODE SE
AJUDAR.
SUA
EVOLUÇÃO
DEPENDE SÓ
 DE VOCÊ.
FRAMEWORKS
FRAMEWORKS

 “... são uma abstração que
une códigos comuns entre
vários projetos provendo uma
        funcionalidade
           genérica.”
                      Wikipedia
EXISTEM TIPOS?
EXISTEM TIPOS?


• Bibliotecas     (Ex: Pear, Zeta Components)

• Frameworks

 • Restritivos   (Ex: CakePHP)

 • Baixo Acoplamento     (Ex: Zend Framework)
PORQUE ADOTAR UM?
PORQUE ADOTAR UM?


• Código   testado/testável

• Grande   base de uso

• Experiência    agregada

• Foque   no que importa: Regras de Negócio
QUEM USA?
QUEM USA?
PORQUE NÃO ADOTAR?
PORQUE NÃO ADOTAR?


• Performance

• Curva   de aprendizado

• Dependência
“FRAMEWORKS PHP POSSUEM
UMA PERFORMANCE POBRE ...”
               Rasmus Lerdorf, 2005
COMPARADOS
AO PHP (PURO),
    SIM ...
... MAS E A
MANUTENÇÃO
 DESSE CÓDIGO?
“ ... 97% DO TEMPO, A OTIMIZAÇÃO
PREMATURA É A RAIZ DE TODO MAL.”
                         Donald Knuth
“ ... 97% DO TEMPO, A OTIMIZAÇÃO
PREMATURA É A RAIZ DE TODO MAL.”
                         Donald Knuth
HARDWARE,
 HOJE, É MUITO
MAIS BARATO
  DO QUE AS
 HORAS DE UM
PROFISSIONAL
O QUE ELE FARÁ POR VOCÊ


• Agiliza   desenvolvimento

• Melhora   segurança

• Melhora   establidade
O QUE ELE NÃO FARÁ


• Melhorará   seu código

• Evitará   que cometa erros

• Garantirá   o sucesso do seu projeto
TER TUDO
 QUE VOCÊ
 PRECISA
PRA FAZER
UMA CASA...
NÃO
 SIGNIFICA
 QUE VOCÊ É
 CAPAZ DE
CONSTRUIR
    UMA.
COMO ESCOLHER?
COMO ESCOLHER?

• Quem   é o líder?

• Documentação

• Tamanho   da comunidade

• Atividade   do Projeto

• Comprometimento     com o PHP
QUEM É O LÍDER?
QUEM É O LÍDER?


• Empresa, Pessoa   ou Grupo

• Você   vai depender dele/dela

• Com    que frequência ele muda de idéia? (BC)

• Sucesso   do projeto (Framework) depende disso
O BUG #50696 E VOCÊ!
O BUG #50696 E VOCÊ!


• Depois   da atualização para o PHP 5.3

 • number_format(“”, 0)    = null

• Antes   da atualização

 • number_format(“”,0)     = 0 (zero)
Eu sou o Rasmus!
E eu o programador “afetado”
Esse comportamento ... é um bug certo?
Não. Meu! Esse seu código não gera
WARNINGS não!? Meio non-sense ele!
Ok. Você não me entendeu.
Isso funcionava desde o princípio!
Eu entendi. Mas mudamos isso pra corrigir
  bugs esquisitos em casos esquisitos ....
Resumindo, vocês me fude***!
Qual a razão disso? Você acha que alguém
        tem NULL reais na conta?
Não! Você pode corrigir tudo isso assim ...
Meu, vão levar MESES pra mudar tudo!
Você ta sendo um pouco dramático ...
Meu, você não tem noção do que você ta
                falando.
Trabalho numa grande organização! Você não
               tem noção.
Acredite. Eu tenho.
Entendi. O seu ambiente é maior..
Provavelmente muito mais crítico!
Cara, não tem como você passar pra alguém
             mais capacitado?
Quem dera eu tivesse amigo. Quem dera eu
                 tivesse.
DOCUMENTAÇÃO
DOCUMENTAÇÃO


• Tão   fundamental quanto o código que move o framework

• Atualizada    regularmente?

• Tão   extensa quanto o projeto?

•É   objetiva e bem organizada?
COMUNIDADE
COMUNIDADE
•É   a alternativa à documentação

• Quanto    tempo ela tem?

• Quão    forte ela é?

  • Ela   é escutada pelo(s) líder(es)?

  • Quantas    pessoas você conhece que usam o framework?

  • Google!

• Qual    a relação dela com o projeto? (Commits, etc ...)
ATIVIDADE
ATIVIDADE

• Qual   a frequêcia de desenvolvimento?

  • Diária   é o que eu esperaria

• Quão    rápido um bug é encontrado/corrigido?

• Quão    frequente são os novos releases?

• Quais   são os planos futuros?
ATIVIDADE
• Como   ver isso?

 • Frequência   de commits

 • Roadmap

 • Sistema   de tickets/bugs

   • Quantos    abertos?

   • Quantos    resolvidos?

 • Ohloh
COMPROMETIMENTO COM
       PHP
COMPROMETIMENTO COM
            PHP


•O   projeto acompanha as mudanças do PHP?

• Qual   a relação dos líderes com o desenvolvimento do PHP?

• Quão   informados eles estão sobre a direção do PHP?
EU TENHO O
    MEU
FRAMEWORK
CUIDADO
SEU FRAMEWORK

• Fora   você, os outros sofrerão com a curva de aprendizado

• Documentação?

• Base   de usuários?

• Ajuda?

• Testes   Unitários?

• Boas   práticas?
SEU FRAMEWORK

• Válido   em poucos casos (poucos mesmo)

  • Aplicações   específicas

    • Base   de acesso é MUITO grande (Ex: Facebook)

    • Processamento    de dados MUITO grande

• Sempre    válido como aprendizado
PRINCIPAIS FRAMEWORKS
PRINCIPAIS FRAMEWORKS
• Mais   tempo de casa

• Maior   base de usuários

• Mais   cases de sucesso

• Respeitam     os usuários

• Todos   são MVC

• Satisfazem     os requisitos que levantei a pouco

  • Ótima   documentação e Atividade
QUEM
 SÃO
ELES?
QUAL A
POPULARIDADE
   DE CADA?
Buscas no Google
100

 90

 80

 70

 60
             Zend Framework   CakePHP    Symfony      Code Igniter
 50

 40

 30

 20

 10

  0
      2006         2007           2008             2009              2010

                                                          Fonte: Google Trends
TwtPool
40




30




20




10




 0
                                Usam

     Zend Framework   CakePHP    Code Igniter   Symfony        Outro

                                                          http://twtpoll.com/r/d1ulz2
VAMOS AOS
   NOSSOS
CONCORRENTES
http://cakephp.org/
CAKEPHP

• Produção      rápida (Bake)

• Baixa   curva de aprendizado (Piece of Cake)

• Equivalente    ao Rails

• Active   Record

• PHP   4.3.2

• Funciona   em qualquer hospedagem
CAKEPHP


• Restritivo

• Código      fonte poluído

  • Muito     grande. Difícil manutenção

  • Difícil   de testar
QUEM É O LÍDER?
QUEM É O LÍDER?


• Cake   Software Foundation

• Antigo   core-developer Nate Abele (agora Lithium)

• Core   atual

  • Grupo    eleito meritocraticamente
COMUNIDADE
COMUNIDADE

• Muito   próxima do desenvolvimento

• Portais   do próprio CakePHP

  • Bakery, Google   Groups, Planet, Tv

• Comunidade     brasileira madura e forte

• @renansaddan    (Core developer brasileiro)
ATIVIDADE
ATIVIDADE


• Atual   1.3.6

• Futura   2.0 (já disponível, instável)

  • Compatível     só com PHP 5
COMPROMETIMENTO COM
       PHP
COMPROMETIMENTO COM
            PHP

• Pequeno

• Muito   tempo compatível com versão 4 (ainda é)

• Possuem   tendências de seguir Strict Standards

• Não   seguem as recomendações (PSR)
http://framework.zend.com/
ZEND FRAMEWORK
• Baixo   acoplamento (Componentes)
• Código   fonte limpo: Design Patterns
• Empresas   envolvidas: Google, Adobe
• Componentes      (centenas)
• Muito   testado! Testes, Testes e mais Testes!
• Enterprise    focused
• PHP   5.2 >
ZEND FRAMEWORK

• Não   possui camada de Model explícita

• Configurações    e mais configurações (Muitas. Mesmo!)

• Curva   de aprendizado variável

• Pouca   documentação de uso na forma Full Stack

  • Má    utilização do framework (geralmente)
QUEM É O LÍDER?
QUEM É O LÍDER?



• Zend   (empresa mantenedora do PHP)

• Matt Weier   O’Phinney (funcionário Zend)
COMUNIDADE
COMUNIDADE

• Muito   próxima do desenvolvimento

• Influencia   ativamente no desenvolvimento

  • Propostas, Bug-hunts, Patches, etc   ...

• Muito   grande nos últimos 2 anos

  • Um    tanto quanto imatura ainda (opinião pessoal)
ATIVIDADE
ATIVIDADE


• Atual   1.11.2

• Futura   2.0 (em desenvolvimento, passos largos)

  • Compatível     só com PHP 5.3 >
COMPROMETIMENTO COM
       PHP
COMPROMETIMENTO COM
             PHP

• Não   preciso comentar, preciso?

• Strict   Standards

  • Versão    1.x ( PHP 5>)

  • Versão    2.x (PHP 5.3>)

• PHP   Standards Recomendations (PSR)
http://symfony-project.org/
SYMFONY

• Segurança     e boas práticas

• Código   fonte limpo: Design Patterns

• Desenvolvimento      rápido (ferramenta CLI)

• ORM    (Doctrine ou Propel)

• PHP   5.2 >
SYMFONY


• Mais   configurações que Cake e Code Igniter

• Curva   de aprendizado um pouco maior

• Mudanças    repentinas no projeto já ocorreram
QUEM É O LÍDER?
QUEM É O LÍDER?


• Fabien   Potencier

  • Atual “Rock   Star” do PHP

  • Seu    lema atual: “Dependecy Injection”

• Sensio   Labs (Empresa, presta suporte)
COMUNIDADE
COMUNIDADE


• Pequena   relativa aos demais

• Amparada   pelo projeto

  • Diretório   de plugins, bloggers, Wiki
ATIVIDADE
ATIVIDADE

• Atual   1.4

• Futura   2.0 (em desenvolvimento, programada para 03/2011)

  • Compatível   só com PHP 5.3 >

  • Performance++

  • Muito   baseada no Cocoa (Apple)
COMPROMETIMENTO COM
       PHP
COMPROMETIMENTO COM
             PHP

• Muito    próxima

• Strict   Standards

• PHP   Standards Recomendations (PSR)

  • Fabien    faz parte do próprio grupo

• Contribuem     ativamente com o desenvolvimento do PHP
http://codeigniter.com/
CODE IGNITER
• Small   footprint

• Restritivo   (não tanto quanto Cake)

• Baixa   curva de aprendizado

• Performance

• ORM     próprio

• PHP   4.3.2 >

• Funciona     em qualquer hospedagem
QUEM É O LÍDER?
QUEM É O LÍDER?


• Ellis   Lab

   • Usam       o “CI” como base para produtos próprios

• Problemas       recorrentes com a comunidade
COMUNIDADE
COMUNIDADE


• Próxima   do desenvolvimento do framework

• Decisões   finais sempre da Ellis Lab

• Madura    e grande (também no Brasil)
ATIVIDADE
ATIVIDADE

• Atual   1.7.3

• Futura   2.0 (em desenvolvimento)

  • Compatível      com PHP 5.2 >

  • Branches      separados

    • Comunidade, mas         ainda controlada pela Ellis Lab (Reactor)

    • Ellis   Lab (Core)
COMPROMETIMENTO COM
       PHP
COMPROMETIMENTO COM
           PHP

• Pequeno

• Sem   propostas (atuais e futuras) de seguir Strict Standards

• Não   seguem as recomendações (PSR)

• Não   contribuem muito com o desenvolvimento da linguagem
RESUMINDO
VOCÊ QUER
DESENVOLVER
  AS COISAS
  RÁPIDO
BAIXA CURVA
      DE
APRENDIZADO
   E MUITO
 RESULTADO
ESSES SÃO OS CARAS




Performance++   Produção++
VOCÊ QUER
  ALTO
CONTROLE
  SOBRE
  TUDO
CÓDIGO
  BEM FEITO E
DOCUMENTADO
ESSES É O CARA
VOCÊ SE
 PREOCUPA
COM TUDO
   ISSO?
QUER O
MEIO-TERMO?
ESSES É O CARA
Frameworks PHP

Frameworks PHP