Josh Lockhart. Novatec



Documentos relacionados
Novatec Editora Ltda. [2014].

Jonathan Stark Brian Jepson

Josh Lockhart. Novatec

Julia Elman e Mark Lavin. Novatec

Desenvolvimento de Grandes Aplicações Web

PDF Explicado John Whitington

Padrões de Projeto em PHP

Ademir C. Gabardo. Novatec

Design Centrado no Usuário

David Hows Peter Membrey Eelco Plugge

Google Analytics Justin Cutroni

Aprendendo. Unix no OS X. Mountain Lion. Mergulhando no Terminal e no Shell. Dave Taylor. Novatec

Primeiros Passos com o Raspberry Pi

Crie Seu Próprio Site

Pete Goodliffe. Novatec

Brandon Rhodes John Goerzen

Ricardo R. Lecheta. Novatec

Adail Henrique Spínola Horst Aécio dos Santos Pires André Luis Boni Déo. Novatec

Novatec Editora Ltda

Criando Aplicações PHP com. Zend e Dojo. Flávio Gomes da Silva Lisboa. Novatec

Josh Pauli Revisão técnica Scott White. Novatec

Aprendendo Programação. ios. Alasdair Allan. Novatec

Lojas Virtuais com. Magento. André Nobrega Gugliotti. Novatec

Desenvolvendo Websites com PHP

Zend. Framework. Componentes Poderosos para PHP. Flávio Gomes da Silva Lisboa. Novatec

Excel Avançado. 2ª Edição. Antonio Fernando Cinto Wilson Moraes Góes. Novatec

A Arte de SEO. Eric Enge, Stephan Spencer, Jessie Stricchiola e Rand Fishkin Introdução de John Battelle. Novatec

Equipes de Software. Um guia para o desenvolvedor de software se relacionar melhor com outras pessoas. Brian W. Fitzpatrick Ben Collins-Sussman

Ricardo R. Lecheta. Novatec

Introdução ao GitHub Peter Bell e Brent Beer

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Novatec Editora Ltda

Hélio Engholm Jr. Novatec

Adrian Mejia. Novatec

Pramod J. Sadalage Martin Fowler

Wilson Moraes Góes. Novatec

André Gugliotti. Novatec

Copyright 2008, 2013 da Novatec Editora Ltda.

Sumário. Prefácio Capítulo 1 Orientação e primeiras etapas Capítulo 2 Dados: trabalhando com texto e números... 40

Keith Wood. Apresentação de Dave Methvin. Novatec

Defenda sua base com circuitos simples, Arduino e Raspberry Pi

Desenvolvendo Websites com PHP

Ricardo Lino Olonca. Novatec

Harrison Kinsley Will McGugan

Ademir C. Gabardo. Novatec

Scrum em Ação. Gerenciamento e Desenvolvimento Ágil de Projetos de Software. Andrew Pham Phuong-Van Pham. Novatec

Aprendendo Cocoa com Objective-C Paris Buttfield-Addison Jonathon Manning

Camila Porto. Novatec

Karl Matthias Sean P. Kane

Ricardo Kléber M. Galvão. Novatec

Padrões JavaScript Stoyan Stefanov

Rails 3 Básico Cloves Carneiro Jr. Rida Al Barazi

Primeiros Passos com Sensores Kimmo Karvinen Tero Karvinen

Gerenciamento. de projetos. Bart Gerardi. Novatec. Como evitar problemas previsíveis para o sucesso do projeto

Criando Relatórios com PHP

Luiz Carlos Querino Filho

Miguel Grinberg. Novatec

jquery Cookbook Comunidade de Desenvolvedores jquery

Benjamin Bengfort Jenny Kim

Ryan Mitchell. Novatec

Service Desk Corporativo

2ª EDIÇÃO. André Milani. Novatec

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Introdução às. Expressões Regulares. Michael Fitzgerald. Novatec

Ricardo Lino Olonca. Novatec

Laboratórios de Tecnologias. Cisco. em Infraestrutura de Redes. Samuel Henrique Bucke Brito. Novatec

Allan Liska e Timothy Gallo. Novatec

Desenvolvimento de Grandes Aplicações Web

Empresa. Dave Gray. Novatec. com Thomas Vander Wal

As Leis Fundamentais do Projeto de Software

João Eriberto Mota Filho

Primeiros Passos com o Netduino

Wilson Moraes Góes. Novatec

Criando Aplicações Gráficas com PHP

Paulo Strelczuk. Novatec

JQuery. A Biblioteca do Programador JavaScript. 3ª Edição Revisada e ampliada. Maurício Samy Silva. Novatec

como acabar com sua em apenas 140 caracteres Carolina Lima Novatec

Guia Prático Richard E. Silverman

Shyam Seshadri & Brad Green

Allen B. Downey. Novatec

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Desenvolvendo para. Windows 8. Aprenda a desenvolver aplicativos para Windows Phone 8 e Windows 8. Ricardo R. Lecheta. Novatec

2ª Edição Alexandre Keller

Google Android para Tablets

Larry Ullman. Novatec

Adail Henrique Spínola Horst Aécio dos Santos Pires André Luis Boni Déo. Novatec

Como melhorar a performance de websites.net

Mineração de dados da web social Matthew A. Russell

Python Cookbook David Beazley Brian K. Jones

Laboratórios de Tecnologias. Cisco. em Infraestrutura de Redes. 2a Edição. Samuel Henrique Bucke Brito. Novatec

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

Google Android para Tablets

Semmy Purewal. Novatec

Aaron Newcomb. Novatec

SAIBA MAIS SOBRE O LINUX E DESCUBRA QUAL DISTRIBUIÇÃO É MELHOR PARA VOCÊ! CURSO

MARKETING DIGITAL NA ERA. Martha Gabriel CONCEITOS, PLATAFORMAS E ESTRATÉGIAS. Novatec

JavaScript. de Alto Desempenho. Nicholas C. Zakas. Novatec

Andreas Wittig Michael Wittig

Transcrição:

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

Sumário Prefácio... 15 Parte I Recursos da linguagem... 21 Capítulo 1 O novo PHP... 22 Passado... 22 Presente... 23 Futuro... 25 Capítulo 2 Recursos... 26 Namespaces... 26 Por que usamos namespaces... 28 Declaração... 29 Importação e alias... 30 Dicas úteis... 33 Codificando para uma interface... 35 Traits... 40 Por que usar traits...41 Como criar um trait... 42 Como utilizar um trait... 44 Generators... 45 Criando um generator... 46 Usando um generator... 47 Closures... 49 Criando uma closure... 50 Associando estados... 52 Zend OPcache... 54 Habilitando o Zend OPcache... 55 Configurando o Zend OPcache... 56 Usando o Zend OPcache... 57 7

8 PHP Moderno Servidor HTTP integrado... 57 Iniciando o servidor... 58 Configurando o servidor... 58 Scripts roteadores... 59 Detectando o servidor integrado... 59 Desvantagens... 60 O que vem a seguir... 60 Parte II Boas práticas... 61 Capítulo 3 Padrões... 62 O PHP-FIG surge para nos ajudar... 62 Interoperabilidade entre frameworks... 63 Interfaces... 64 Autoloading... 64 Estilo... 64 O que é uma PSR?... 65 PSR-1: estilo básico de codificação... 66 PSR-2: estilo rigoroso de codificação... 67 PSR-3: interface para logger... 72 Criando um logger PSR-3... 73 Usando um logger PSR-3...74 PSR-4: autoloaders... 75 Por que os autoloaders são importantes... 75 A estratégia de autoloader da PSR-4... 76 Como implementar um autoloader PSR-4 (e por que você não deve fazê-lo)... 77 Capítulo 4 Componentes... 79 Por que usar componentes?... 79 O que são componentes?... 80 Componentes versus frameworks...81 Nem todos os frameworks são ruins... 82 Utilize a ferramenta correta para a tarefa... 83 Encontrando componentes... 84 Indo às compras... 85 Escolhendo um componente... 85 Proporcionando feedbacks... 86 Usando componentes PHP... 86 Como instalar o Composer... 87 Como usar o Composer... 88

Sumário 9 Exemplo de projeto...91 Composer e os repositórios privados... 94 Criando componentes PHP... 96 Nomes de fornecedor e de pacote... 96 Namespaces... 97 Organização do sistema de arquivos... 97 O arquivo composer.json... 98 O arquivo README... 101 Implementação do componente...102 Controle de versões...104 Submissão ao Packagist...105 Usando o componente... 106 Capítulo 5 Boas práticas... 107 Sanitizar, validar e escapar...107 Sanitizando as entradas...108 Validando dados...111 Escapando a saída... 113 Senhas... 113 Jamais tome conhecimento das senhas dos usuários... 114 Jamais restrinja as senhas dos usuários... 114 Jamais envie senhas dos usuários por email... 115 Gere a hash das senhas de usuário com o bcrypt... 115 API para hashing de senhas... 116 API de hashing de senha para versões de PHP anteriores a 5.5.0...122 Datas, horas e fusos horários...123 Definindo um fuso horário default...123 A classe DateTime...123 A classe DateInterval...125 A classe DateTimeZone...126 A classe DatePeriod...127 O componente nesbot/carbon...129 Bancos de dados...129 A extensão PDO...129 Conexões com o banco de dados e os DSNs...130 Prepared statements...133 Resultados de query...135 Transações...138 Strings multibyte...142 Codificação de caracteres...143 Gerando dados de saída em UTF-8...144

10 PHP Moderno Streams...144 Wrappers de stream...145 Contexto de stream...149 Filtros de stream...149 Filtros personalizados de stream...152 Erros e exceções...155 As exceções...156 Handlers de exceção... 160 Erros... 161 Handlers de erro...163 Erros e exceções durante o desenvolvimento...165 Ambiente de produção...167 Parte III Implantação, testes e ajustes... 170 Capítulo 6 Hosting... 171 Servidor compartilhado... 171 Servidor privado virtual...172 Servidor dedicado...173 PaaS...173 Escolhendo um plano de hosting... 174 Capítulo 7 Provisionamento... 175 Nossa meta...176 Configuração do servidor...176 Primeiro login...176 Atualizações de software...177 Usuário diferente de root...177 Autenticação SSH com par de chaves...178 Desabilitando o login com senhas e o login de root...180 PHP-FPM... 181 Instalação...182 Configuração global...182 Configuração do pool...183 nginx...187 Instalação...187 Host virtual...188 Automatizando o provisionamento dos servidores... 191 Delegando o provisionamento dos servidores...192

Sumário 11 Leituras complementares...192 O que vem a seguir...192 Capítulo 8 Ajustes... 193 O arquivo php.ini...193 Memória...194 Zend OPcache...195 Upload de arquivos...198 Tempo máximo de execução...198 Tratamento de sessões... 200 Bufferização de saída... 200 Realpath Cache... 201 O que vem a seguir... 201 Capítulo 9 Implantação... 202 Controle de versões... 202 Implantação automatizada... 203 Mantenha a simplicidade... 203 Torne a implantação previsível... 203 Torne a implantação reversível... 203 Capistrano... 203 Como o Capistrano funciona... 204 Instalação... 205 Configuração... 205 Autenticação... 207 Preparando o servidor remoto... 208 Hooks do Capistrano... 209 Implantação de sua aplicação... 209 Fazendo rollback de sua aplicação...210 Leituras complementares...210 O que vem a seguir...210 Capítulo 10 Testes... 211 Por que testamos?...211 Quando devemos testar?... 212 Antes... 212 Durante... 212 Depois... 212 O que devemos testar?... 213 Como testamos?... 213 Testes de unidade... 213

12 PHP Moderno Desenvolvimento orientado a testes (TDD)... 214 Desenvolvimento orientado a comportamento (BDD)... 214 PHPUnit...215 Estrutura de diretórios...216 Instalando o PHPUnit... 217 Instalando o Xdebug... 218 Configurando o PHPUnit... 219 A classe Whovian... 220 O caso de teste WhovianTest... 221 Executando os testes...224 Cobertura de código...225 Testes contínuos com o Travis CI... 226 Configuração... 227 Execução... 228 Leituras complementares... 228 O que vem a seguir... 228 Capítulo 11 Profiling... 229 Quando devemos usar um profiler... 229 Tipos de profilers... 230 Xdebug... 230 Configuração... 230 Acionando o profiler... 231 Análise...232 XHProf...232 Instalação...232 XHGUI...233 Configuração...234 Acionando o XHGUI...234 O profiler New Relic...235 Profiler Blackfire...235 Leituras complementares...235 O que vem a seguir... 236 Capítulo 12 HHVM e Hack... 237 HHVM...237 O PHP no Facebook... 238 Paridade entre HHVM e Zend Engine... 240 A HHVM é adequada para mim?... 240 Instalação... 241 Configuração...242

Sumário 13 Extensões...243 Monitorando a HHVM com o Supervisord...243 HHVM, FastCGI e nginx... 246 A linguagem Hack...247 Conversão de PHP para Hack... 248 O que é um tipo?... 248 Tipagem estática... 250 Tipagem dinâmica... 251 O Hack é uma via de mão dupla... 251 Verificação de tipos do Hack...252 Modos do Hack...253 Sintaxe do Hack... 254 Estruturas de dados do Hack... 256 HHVM/Hack versus PHP...257 Leituras complementares...259 Capítulo 13 Comunidade... 260 PUG local... 260 Conferências... 260 Orientação...261 Mantenha-se atualizado...261 Sites...261 Listas de correspondência...261 Twitter...261 Podcasts... 262 Humor... 262 Apêndice A Instalando o PHP... 263 Linux... 263 Gerenciadores de pacotes... 263 Ubuntu 14.04 LTS... 264 CentOS 7... 265 OS X...267 MAMP... 268 Homebrew...270 Geração do PHP a partir do código-fonte...275 Obtenha o código-fonte...276 Windows... 282 Binários... 283 WAMP... 283 Zend Server... 284

14 PHP Moderno Apêndice B Ambientes para desenvolvimento local... 285 VirtualBox... 286 Vagrant... 286 Comandos... 287 Boxes... 288 Inicialização... 288 Provisionamento... 289 Pastas sincronizadas... 290 Comece a trabalhar... 291 Sobre o autor... 294 Colofão... 295