Josh Lockhart
Novatec
Authorized Portuguese translation of the English edition of titled Modern PHP, ISBN 9781491905012 © 2015 Josh Lockhart. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês da obra Modern PHP, ISBN 9781491905012 © 2015 Josh Lockhart. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. © Novatec Editora Ltda. 2015. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia A. Kinoshita Revisão gramatical: Mari Kumagai Editoração eletrônica: Carolina Kuwabata Assistente editorial: Priscila A. Yoshimatsu ISBN: 978-85-7522-428-1 Histórico de impressões: Abril/2015 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
capítulo 1
O novo PHP
A linguagem PHP está passando por um renascimento. O PHP está se transformando em uma linguagem de scripting moderna, com recursos úteis como namespaces, traits, closures e um cache de opcode integrado. O ecossistema do PHP moderno também está evoluindo. Os desenvolvedores PHP dependem menos de frameworks monolíticos, e mais de componentes menores e especializados. O gerenciador de dependências Composer está revolucionando a forma de criar aplicações PHP; ele nos liberta do jardim cercado de muros de um framework e permite misturar e combinar componentes PHP que proporcionem interoperação e sejam mais adequados às nossas aplicações PHP personalizadas. A interoperabilidade entre os componentes não seria possível sem padrões da comunidade, propostos e mantidos pelo PHP Framework Interop Group. O livro PHP Moderno é seu guia para o novo PHP, e mostrará como criar e implantar aplicações PHP incríveis usando padrões da comunidade, boas práticas e componentes que possibilitem interoperação.
Passado Antes de explorarmos o PHP moderno, é importante entender a origem do PHP. O PHP é uma linguagem de scripting interpretada, usada no lado do servidor. Isso significa que você escreve código PHP, carrega-o em um servidor web e executa-o com um interpretador. O PHP normalmente é usado com um servidor web como o Apache ou o nginx para servir conteúdo dinâmico. Entretanto o PHP também pode ser usado para criar aplicações eficazes de linha de comando (assim como o bash, o Ruby, o Python e assim por diante). Muitos desenvolvedores PHP não percebem isso e deixam de lado um recurso realmente empolgante. Mas não é o seu caso. A história oficial do PHP pode ser lida em http://php.net/manual/history.php.php. Não repetirei o que já foi muito bem dito por Rasmus Lerdorf (o criador do PHP). O que direi é que o PHP tem um passado tumultuado. Essa linguagem começou 22
Capítulo 1 ■ O novo PHP
23
como uma coleção de scripts CGI criada por Rasmus Lerdorf para monitorar as visitas ao seu currículo online. Lerdorf chamou seu conjunto de scripts CGI de “Personal Home Page Tools”. Essa versão preliminar era totalmente diferente do PHP que conhecemos hoje. O PHP Tools inicial de Lerdorf não era uma linguagem de scripting; eram ferramentas que ofereciam variáveis rudimentares e interpretação automática de variáveis de formulário usando uma sintaxe HTML embutida. Entre 1994 e 1998, o PHP passou por inúmeras revisões e houve até mesmo algumas reescritas completas. Andi Gutmans e Zeev Suraski – dois desenvolvedores de Tel Aviv – juntaram suas forças com Rasmus Lerdorf para transformar o PHP, partindo de uma pequena coleção de ferramentas CGI para uma linguagem de programação completa, com uma sintaxe mais consistente e um suporte básico para programação orientada a objetos. Eles chamaram seu produto final de PHP 3 e o disponibilizaram no final de 1998. O novo nome PHP originou-se de nomes anteriores, e é um acrônimo recursivo para PHP: Hypertext Preprocessor. O PHP 3 foi a primeira versão que mais lembrava o PHP que conhecemos atualmente. Essa versão oferecia mais capacidade de extensão para diversos bancos de dados, protocolos e APIs. A capacidade de extensão do PHP 3 atraiu muitos novos desenvolvedores ao projeto. No final de 1998, o PHP 3 já estava instalado em incríveis 10% dos servidores web no mundo.
Presente Hoje em dia, a linguagem PHP está evoluindo rapidamente, e seu suporte é feito por dezenas de desenvolvedores que fazem parte da equipe que trabalha com o seu núcleo em todo o mundo. As práticas de desenvolvimento também mudaram. No passado, uma prática comum consistia em criar um arquivo PHP, carregá-lo em um servidor de produção por meio de FTP e esperar que ele funcionasse. É uma péssima estratégia de desenvolvimento, porém era necessária devido à falta de ambientes viáveis para desenvolvimento local. Atualmente, evitamos usar o FTP e utilizamos um sistema de controle de versões em seu lugar. Softwares de controle de versões como o Git ajudam a manter um histórico de código que possa ser auditado, além de ser possível criar branches, fazer forks e merges. Os ambientes de desenvolvimento locais são idênticos aos servidores de produção, graças às ferramentas de virtualização como o Vagrant e ferramentas de configuração como o Ansible, Chef e Puppet. Podemos tirar proveito de componentes PHP especializados com o gerenciador de dependências Composer. Nosso código PHP é aderente aos PSRs – padrões da comunidade
24
PHP Moderno
administrados pelo PHP Framework Interop Group. Testamos completamente nosso código com ferramentas como o PHPUnit. Implantamos nossas aplicações com o gerenciador de processos FastCGI do PHP por trás de um servidor web como o nginx. Além disso, melhoramos o desempenho das aplicações com um cache de opcode. O PHP moderno inclui várias práticas novas que podem não ser familiares a quem o PHP é uma novidade ou para aqueles que estão partindo de versões mais antigas de PHP. Não se preocupe. Descreverei cada um dos conceitos posteriormente neste livro. Também estou empolgado com o fato de o PHP agora ter uma especificação preliminar oficial – algo que não existia até 2014. A maioria das linguagens de programação maduras tem uma especificação. Em termos leigos, uma especificação é um documento canônico que define o que significa ser PHP. Esse documento é usado por desenvolvedores que criam programas que fazem parse, interpretam e executam código PHP. Não é um documento para desenvolvedores que criam aplicações e sites usando PHP.
Sara Golemon e o Facebook anunciaram a primeira versão preliminar da especificação PHP na conferência OSCON da O’Reilly em 2014. O anúncio oficial pode ser lido na lista de correspondência interna do PHP (http://bit.ly/php-internals), e a especificação do PHP (http://bit.ly/php-langspec) pode ser lida no GitHub. Uma especificação oficial da linguagem PHP está se tornando mais importante, considerando a introdução de várias engines PHP concorrentes. A engine PHP original é a Zend Engine (http://www.zend.com/en/company/community/php/), que é um interpretador PHP escrito em C e introduzido no PHP 4. A Zend Engine foi criada por Rasmus Lerdorf, Andi Gutmans e Zeev Suraski. Atualmente, a Zend Engine é a principal contribuição da empresa Zend à comunidade PHP. No entanto, há agora uma segunda engine PHP importante – a HipHop Virtual Machine do Facebook. Uma especificação da linguagem garante que ambas as engines manterão uma compatibilidade básica. Uma engine PHP é um programa que faz parse, interpreta e executa código PHP (por exemplo, a Zend Engine ou a HipHop Virtual Machine do Facebook).Não a confunda com PHP, que é uma referência genérica à linguagem PHP.
Capítulo 1 ■ O novo PHP
25
Futuro A Zend Engine está melhorando a passos rápidos, com novos recursos e desempenho aprimorado. Atribuo as melhorias da Zend Engine ao seus novos concorrentes, especificamente à HipHop Virtual Machine e à linguagem de programação Hack do Facebook. O Hack é uma nova linguagem de programação criada com base no PHP. Ela introduz tipagem estática, novas estruturas de dados e interfaces adicionais, ao mesmo tempo em que mantém a compatibilidade com versões anteriores de código PHP existente, com tipagem dinâmica. O Hack visa aos desenvolvedores que apreciam as características de desenvolvimento rápido do PHP, mas que precisam da previsibilidade e da estabilidade da tipagem estática. Discutiremos a tipagem dinâmica em comparação com a tipagem estática mais adiante neste livro. A diferença entre as duas está em quando os tipos PHP são verificados. Os tipos dinâmicos são verificados em tempo de execução, enquanto os tipos estáticos são verificados em tempo de compilação. Consulte o capítulo 12 para obter mais informações.
A HHVM (HipHop Virtual Machine) é um interpretador de PHP e Hack que usa um compilador JIT (Just in Time) para melhorar o desempenho das aplicações e reduzir o uso de memória. Não vejo o Hack e a HHVM substituindo a Zend Engine, porém as novas contribuições do Facebook estão agitando bastante a comunidade PHP. O aumento da concorrência fez a equipe do núcleo da Zend Engine anunciar o PHP 7 (http://bit.ly/php7-timeline) – uma Zend Engine otimizada que, segundo dizem, estará à altura da HHVM. Discutiremos mais sobre esses desenvolvimentos no capítulo 12. É um período empolgante para ser um programador PHP. A comunidade PHP jamais esteve tão cheia de energia, foi tão divertida e inovadora. Espero que este livro ajude você a adotar firmemente as práticas do PHP moderno. Há inúmeras novidades para aprender e muito mais no horizonte. Considere isso como o seu roadmap. Agora vamos começar.