Josh Lockhart. Novatec - PDF
Download "Josh Lockhart. Novatec"
Esther Álvaro Franco
1 Josh Lockhart Novatec
2 Authorized Portuguese translation of the English edition of titled Modern PHP, ISBN 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 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 Todos os direitos reservados e protegidos pela Lei 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: Histórico de impressões: Abril/2015 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos São Paulo, SP Brasil Tel.: Site: Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
3 Sumário Prefácio Parte I Recursos da linguagem Capítulo 1 O novo PHP Passado Presente Futuro Capítulo 2 Recursos Namespaces Por que usamos namespaces Declaração Importação e alias Dicas úteis Codificando para uma interface Traits Por que usar traits...41 Como criar um trait Como utilizar um trait Generators Criando um generator Usando um generator Closures Criando uma closure Associando estados Zend OPcache Habilitando o Zend OPcache Configurando o Zend OPcache Usando o Zend OPcache
4 8 PHP Moderno Servidor HTTP integrado Iniciando o servidor Configurando o servidor Scripts roteadores Detectando o servidor integrado Desvantagens O que vem a seguir Parte II Boas práticas Capítulo 3 Padrões O PHP-FIG surge para nos ajudar Interoperabilidade entre frameworks Interfaces Autoloading Estilo O que é uma PSR? PSR-1: estilo básico de codificação PSR-2: estilo rigoroso de codificação PSR-3: interface para logger Criando um logger PSR Usando um logger PSR PSR-4: autoloaders Por que os autoloaders são importantes A estratégia de autoloader da PSR Como implementar um autoloader PSR-4 (e por que você não deve fazê-lo) Capítulo 4 Componentes Por que usar componentes? O que são componentes? Componentes versus frameworks...81 Nem todos os frameworks são ruins Utilize a ferramenta correta para a tarefa Encontrando componentes Indo às compras Escolhendo um componente Proporcionando feedbacks Usando componentes PHP Como instalar o Composer Como usar o Composer... 88
5 Sumário 9 Exemplo de projeto...91 Composer e os repositórios privados Criando componentes PHP Nomes de fornecedor e de pacote Namespaces Organização do sistema de arquivos O arquivo composer.json O arquivo README Implementação do componente Controle de versões Submissão ao Packagist Usando o componente Capítulo 5 Boas práticas Sanitizar, validar e escapar Sanitizando as entradas Validando dados Escapando a saída Senhas Jamais tome conhecimento das senhas dos usuários Jamais restrinja as senhas dos usuários Jamais envie senhas dos usuários por Gere a hash das senhas de usuário com o bcrypt API para hashing de senhas API de hashing de senha para versões de PHP anteriores a Datas, horas e fusos horários Definindo um fuso horário default A classe DateTime A classe DateInterval A classe DateTimeZone A classe DatePeriod O componente nesbot/carbon Bancos de dados A extensão PDO Conexões com o banco de dados e os DSNs Prepared statements Resultados de query Transações Strings multibyte Codificação de caracteres Gerando dados de saída em UTF
6 10 PHP Moderno Streams Wrappers de stream Contexto de stream Filtros de stream Filtros personalizados de stream Erros e exceções As exceções Handlers de exceção Erros Handlers de erro Erros e exceções durante o desenvolvimento Ambiente de produção Parte III Implantação, testes e ajustes Capítulo 6 Hosting Servidor compartilhado Servidor privado virtual Servidor dedicado PaaS Escolhendo um plano de hosting Capítulo 7 Provisionamento Nossa meta Configuração do servidor Primeiro login Atualizações de software Usuário diferente de root Autenticação SSH com par de chaves Desabilitando o login com senhas e o login de root PHP-FPM Instalação Configuração global Configuração do pool nginx Instalação Host virtual Automatizando o provisionamento dos servidores Delegando o provisionamento dos servidores...192
7 Sumário 11 Leituras complementares O que vem a seguir Capítulo 8 Ajustes O arquivo php.ini Memória Zend OPcache Upload de arquivos Tempo máximo de execução Tratamento de sessões Bufferização de saída Realpath Cache O que vem a seguir Capítulo 9 Implantação Controle de versões Implantação automatizada Mantenha a simplicidade Torne a implantação previsível Torne a implantação reversível Capistrano Como o Capistrano funciona Instalação Configuração Autenticação Preparando o servidor remoto Hooks do Capistrano Implantação de sua aplicação Fazendo rollback de sua aplicação Leituras complementares O que vem a seguir Capítulo 10 Testes Por que testamos? Quando devemos testar? Antes Durante Depois O que devemos testar? Como testamos? Testes de unidade
8 12 PHP Moderno Desenvolvimento orientado a testes (TDD) Desenvolvimento orientado a comportamento (BDD) PHPUnit Estrutura de diretórios Instalando o PHPUnit Instalando o Xdebug Configurando o PHPUnit A classe Whovian O caso de teste WhovianTest Executando os testes Cobertura de código Testes contínuos com o Travis CI Configuração Execução Leituras complementares O que vem a seguir Capítulo 11 Profiling Quando devemos usar um profiler Tipos de profilers Xdebug Configuração Acionando o profiler Análise XHProf Instalação XHGUI Configuração Acionando o XHGUI O profiler New Relic Profiler Blackfire Leituras complementares O que vem a seguir Capítulo 12 HHVM e Hack HHVM O PHP no Facebook Paridade entre HHVM e Zend Engine A HHVM é adequada para mim? Instalação Configuração...242
9 Sumário 13 Extensões Monitorando a HHVM com o Supervisord HHVM, FastCGI e nginx A linguagem Hack Conversão de PHP para Hack O que é um tipo? Tipagem estática Tipagem dinâmica O Hack é uma via de mão dupla Verificação de tipos do Hack Modos do Hack Sintaxe do Hack Estruturas de dados do Hack HHVM/Hack versus PHP Leituras complementares Capítulo 13 Comunidade PUG local Conferências Orientação Mantenha-se atualizado Sites Listas de correspondência Twitter Podcasts Humor Apêndice A Instalando o PHP Linux Gerenciadores de pacotes Ubuntu LTS CentOS OS X MAMP Homebrew Geração do PHP a partir do código-fonte Obtenha o código-fonte Windows Binários WAMP Zend Server
10 14 PHP Moderno Apêndice B Ambientes para desenvolvimento local VirtualBox Vagrant Comandos Boxes Inicialização Provisionamento Pastas sincronizadas Comece a trabalhar Sobre o autor Colofão