Download - A Arte do Desenvolvimento PHP - 1.1
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
A Arte do Desenvolvimento PHPA Arte do Desenvolvimento PHPFISL 11FISL 11
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Anderson Anderson DuodracoDuodraco Casimiro Casimiro
● Zend Certified Engineer - 2007Zend Certified Engineer - 2007● Coordenação do PHPSPCoordenação do PHPSP● Desenvolvedor Web desde 2002Desenvolvedor Web desde 2002
● Atuando em diversas áreasAtuando em diversas áreas
● Analista PHP - TiqueImóveisAnalista PHP - TiqueImóveis
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
ObjetivosObjetivos● Ferramentas built-inFerramentas built-in● Fontes ExternasFontes Externas
● PEAR / PECL, Frameworks, Recursos externosPEAR / PECL, Frameworks, Recursos externos
● AplicaçãoAplicação● Ciclo de desenvolvimentoCiclo de desenvolvimento
● ConclusãoConclusão
Agenda
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Objetivos
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Somos Artesãos
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
precisamos de ferramentas
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
O que temos à mão?
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
PHPPHP
● Por si só já é uma toolboxPor si só já é uma toolbox● Nativamente suporta a maioria dos SGDBsNativamente suporta a maioria dos SGDBs
● Via correta compilação/instalaçãoVia correta compilação/instalação
● SQLiteSQLite● Suporte a Orientação a ObjetosSuporte a Orientação a Objetos
● Design PatternsDesign Patterns
● StreamsStreams● Controle sobre o HTTPControle sobre o HTTP● XML, JSON, WSDL ...XML, JSON, WSDL ...
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Namespaces
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
● PHP5.3+PHP5.3+
● OrganizaçãoOrganização
● PacotesPacotes
● Evita conflitos de nomeEvita conflitos de nome
● namespacenamespace Framework Framework \\ DB; DB;
● useuse Framework Framework \\ DB; DB;
● InstanceInstance::::conn(conn($dsn$dsn,,$user$user,,$secret$secret););
● Framework Framework \\ DB DB \\ Instance Instance::::conn(...);conn(...);
NamespacesNamespaces
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
SPL: Standard PHP Library
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
SPLSPL
● Classes, Interfaces e funçõesClasses, Interfaces e funções● Funções para Autoload e outrasFunções para Autoload e outras● IteratorsIterators● Estruturas de DadosEstruturas de Dados● ObserverObserver● Array ObjectArray Object● SPLTypesSPLTypes
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
PDO: PHP Data Objects
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
PDOPDO
● Interface padrão para acesso a BDInterface padrão para acesso a BD● $pdo->query$pdo->query ao invés de ao invés de mysql_querymysql_query ou ou pg_querypg_query
● DriversDrivers● MSSql, MySQL, PostgreSQL, Firebird, Oracle, etcMSSql, MySQL, PostgreSQL, Firebird, Oracle, etc● PDO 4D (experimental)PDO 4D (experimental)● ODBCODBC
● Utiliza-se da SPLUtiliza-se da SPL● Iterators reduzem a carga Iterators reduzem a carga
● ProcessamentoProcessamento● Transporte de dadosTransporte de dados
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Datetime
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
DatetimeDatetime
● PHP 5.2+PHP 5.2+● Conjunto de classes para manipulação de Conjunto de classes para manipulação de
tempo.tempo.● TimezoneTimezone● Interval / PeriodInterval / Period
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Command Line Interface
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Buscando recursos externos
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Google Code
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Source Forge
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
PEAR e PECL
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
PEAR e PECLPEAR e PECL
● PEAR – Classes e bibliotecas (PHP)PEAR – Classes e bibliotecas (PHP)● PECL – Extensões compiladasPECL – Extensões compiladas
● pear channel-discover pear.phpunit.depear channel-discover pear.phpunit.de
● pear install –all-deps phpunit/PHPUnit pear install –all-deps phpunit/PHPUnit
● pecl install xdebugpecl install xdebug
●
● Em breve PEAR2Em breve PEAR2
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Fazendo Arte
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Integração Contínua
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Integração ContínuaIntegração Contínua
● ““² Condição de constituir um todo pela adição ou ² Condição de constituir um todo pela adição ou combinação de partes ou elementos.” (Michaelis)combinação de partes ou elementos.” (Michaelis)
● Integração de uma mudançaIntegração de uma mudança● Sem que quebre seu projetoSem que quebre seu projeto● RegularmenteRegularmente
● Prática de engenharia de softwarePrática de engenharia de software● Metodologias ágeisMetodologias ágeis
● Produzir um sistema funcional quantas vezes Produzir um sistema funcional quantas vezes forem possíveisforem possíveis
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Integração ContínuaIntegração Contínua
● Hudson + PhingHudson + Phing● PHP Under Control [CruiseControl]PHP Under Control [CruiseControl]● ArbitArbit● SismoSismo● XINC – Xinc Is Not Cruise ControlXINC – Xinc Is Not Cruise Control
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Deployment com Phing
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
PhingPhing
● Phing Is Not GnumakePhing Is Not Gnumake● Ferramenta de building, realiza tarefas que Ferramenta de building, realiza tarefas que
auxiliam a aplicaçãoauxiliam a aplicação● ConfigurarConfigurar● EmpacotarEmpacotar● Transferir entre servidoresTransferir entre servidores● TestarTestar
– Testes unitários, padrões de código, documentaçãoTestes unitários, padrões de código, documentação● etcetc
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Testes Unitários
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Testes UnitáriosTestes Unitários
● Testes de Entrada e Saída para cada Testes de Entrada e Saída para cada unidade do projetounidade do projeto
● PHPUnitPHPUnit● LimeLime● SimpleTestSimpleTest
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Padrão de Codificação
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Padrão de CodificaçãoPadrão de Codificação
● OrganizaçãoOrganização● Consistência, todos programam do mesmo Consistência, todos programam do mesmo
jeitojeito● Zend, PEAR, PHPCS, Squiz e MySourceZend, PEAR, PHPCS, Squiz e MySource
● PHP_Codesniffer PHP_Codesniffer ● CodeBeautifier / PHP_BeautifierCodeBeautifier / PHP_Beautifier
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Documentação
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
DocumentaçãoDocumentação
● PHPDocumentorPHPDocumentor● DoxygenDoxygen
● PHP2UML / UML2PHPPHP2UML / UML2PHP● Dia2PHPDia2PHP● PHP2XMIPHP2XMI
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Replicação
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
ReplicaçãoReplicação
● Duplicação:Duplicação:● TextualmenteTextualmente● MarcaçãoMarcação● FuncionalidadeFuncionalidade
● Replicação != ReutilizaçãoReplicação != Reutilização● Código replicado “evolui” em separadoCódigo replicado “evolui” em separado
● PHPCPD – Copy & Paste DetectorPHPCPD – Copy & Paste Detector● Varre os arquivos PHP em busca de trechos duplicados Varre os arquivos PHP em busca de trechos duplicados
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Métricas de Software
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Métricas de SoftwareMétricas de Software
● PHP_DependPHP_Depend● Indetifica porções de código candidatas a Indetifica porções de código candidatas a
refatoração.refatoração.● CCN: Cyclomatic ComplexityCCN: Cyclomatic Complexity● LoC - > Linhas de CódigoLoC - > Linhas de Código
– TotaisTotais– Comentadas (CLoC) ou não (NCLoC)Comentadas (CLoC) ou não (NCLoC)– Executáveis (EloC)Executáveis (EloC)
● etc..etc..
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Acabando com os Bugs!
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Acabando com os Bugs! Acabando com os Bugs!
● NÃO “DEBUGUE” COM ECHO!!!NÃO “DEBUGUE” COM ECHO!!!● Utilize ferramentas que:Utilize ferramentas que:
● Param a execuçãoParam a execução● Permitem o avanço passo-a-passo da execuçãoPermitem o avanço passo-a-passo da execução● Mostram todas as variáveis ativas em qualquer Mostram todas as variáveis ativas em qualquer
pontoponto● Avaliam performanceAvaliam performance● Possibilitem que você faça tudo isso da sua IDEPossibilitem que você faça tudo isso da sua IDE
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
E o nosso repelente é ...E o nosso repelente é ...
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
XDebugXDebug
● PECL, Binários, código fontePECL, Binários, código fonte● DebuggingDebugging● TracingTracing● ProfillingProfilling
● CachegrindCachegrind
● Integração com as principais IDEsIntegração com as principais IDEs
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Além do XDebugAlém do XDebug
● WebgrindWebgrind● PHP_DebugPHP_Debug● DbugDbug● FirePHPFirePHP● *DBG**DBG*
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Frameworks
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
FrameworksFrameworks
● Vai te poupar tempo Vai te poupar tempo ● e evitar cabelos brancos precocese evitar cabelos brancos precoces
● O básico já está prontoO básico já está pronto● EstruturaEstrutura● Conexão com o BDConexão com o BD● SegurançaSegurança● Comuncação (API / Email / WS / etc)Comuncação (API / Email / WS / etc)
● Na maioria adotam o MVCNa maioria adotam o MVC
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
FrameworksFrameworks
● Zend FrameworkZend Framework● SymfonySymfony● CakePHPCakePHP● CodeIgniterCodeIgniter● KohanaKohana● SeagullSeagull● YiiYii
● PradoPrado● EzComponentsEzComponents● FuseBoxFuseBox● QCodoQCodo
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Manipulação de Dados
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Camada de AbstraçãoCamada de Abstração
● Provê uma interface unificada de comunicação Provê uma interface unificada de comunicação entre a aplicação e o Banco de Dados, seja qual entre a aplicação e o Banco de Dados, seja qual for.for.
● PDOPDO● MDB2MDB2● ADODBADODB● DbFacileDbFacile● DoctrineDoctrine
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
ORMORM
● Mapeamento Objeto-RelacionalMapeamento Objeto-Relacional● Objetos como entidadesObjetos como entidades●
● CreoleCreole● PropelPropel● DoctrineDoctrine● Outlet , RedBean Outlet , RedBean
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Gerenciando
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
GerenciandoGerenciando
● ProjetosProjetos● TarefasTarefas● BugsBugs● EquipeEquipe● WorkflowWorkflow● VersõesVersões● IntegraçãoIntegração
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Gerenciando ProjetosGerenciando Projetos
● PHProjektPHProjekt● PHP-CollabPHP-Collab● AchievoAchievo● ArbitArbit● MantisMantis
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Hora de codar
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
IDEIDE
● Integrated Development EnviromentIntegrated Development Enviroment● Ambiente integrado: Código, Debug, Profilling...Ambiente integrado: Código, Debug, Profilling...
● ZendStudio / PDTZendStudio / PDT● NetbeansNetbeans● KomodoKomodo● KdevelopKdevelop● GeanyGeany
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Objetivo e Criatividade
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Perguntas???
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
Obrigado!!!
duodraco.comduodraco.com @duodraco@duodracoFISL11FISL11
● [email protected]@duodraco.com● [email protected]@phpsp.org.br
● @duodraco@duodraco● duodraco.comduodraco.com● facebook.com/duodracofacebook.com/duodraco● linkedin.com/in/andersoncasimirolinkedin.com/in/andersoncasimiro