Você está na página 1de 7

LIVRO PHP MODERNO

Captulo 1. O Novo PHP


A linguagem PHP est experimentando um renascimento. PHP est se transformando em uma
linguagem de script moderna com caractersticas teis, como namespaces, traits, closures , e um
built-in opcode cache. O moderno ecossistema PHP est evoluindo tambm. desenvolvedores PHP
dependem menos de estruturas monolticas e mais em componentes especializados menores. o
Composer gerente de dependncia est revolucionando a forma como vamos construir aplicaes
PHP; que nos emancipa do jardim murado de um quadro e nos permite misturar e combinar PHP
interopervel componentes mais adequados para as nossas aplicaes personalizadas PHP.
interoperabilidade dos componentes no seria possvel sem os padres da comunidade proposto e
com curadoria do Framewok PHP Grupo Interop.
PHP moderno o seu guia para o novo PHP, e vai mostrar-lhe como construir e implantar
aplicaes surpreendentes com PHP usando padres da comunidade, boas prticas, e componentes
interoperveis.

Passado
Antes de explorarmos o PHP moderno, importante compreender a origem do PHP. PHP uma
linguagem interpretadora de script do lado do servidor. Isto significa que voc escreve cdigo PHP,
envia ele para um servidor web, e executa com um intrprete. PHP normalmente usada com um
servidor web Apache ou nginx para servir contedo dinmico. No entanto, PHP tambm podem ser
usados para construir aplicaes de linha de comando poderosos (como bash, Ruby, Python, e assim
por diante). Muitos desenvolvedores PHP no percebem isso e perdem uma caracterstica muito
emocionante. No voc, apesar de tudo.
Voc pode ler a histria oficial do PHP na pgina http://php.net/manual/history.php.php. Eu no vou
repetir o que j foi dito to bem por Rasmus Lerdorf (o criador do PHP). O que eu
vou dizer-lhe que o PHP tem um passado tumultuado. PHP comeou como uma coleo de scripts
CGI escrito por Rasmus Lerdorf para rastrear as visitas ao seu currculo online. Lerdorf nomeou seu
conjunto de scripts CGI "Personal Home Page Tools." Esta primeira encarnao foi completamente
diferente a partir do PHP que conhecemos hoje. A primeiras ferramentas PHP de Lerdorf no eram
uma linguagem de script; eles eram ferramentas que forneceram variveis rudimentares e varivel
forma automticainterpretao usando uma sintaxe embutida no HTML.
Entre 1994 e 1998, PHP sofreu inmeras revises e ainda recebeu alguns
reescreve ground-up . Andi Gutmans e Zeev Suraski, dois desenvolvedores de Tel Aviv,
juntoram foras com Rasmus Lerdorf para transformar PHP a partir de uma pequena coleo de
ferramentas de CGI em uma linguagem de programao completa com uma sintaxe mais
consistente e suporte bsico para programao orientada a objetos. Eles nomearam seu PHP produto
final 3 e lanaram no final de 1998. O novo apelido PHP foi uma partida de nomes anteriores, e
uma recursiva acrnimo para PHP: Hypertext Preprocessor. PHP 3 foi a primeira verso que a
maioria assemelhava ao PHP que ns conhecemos hoje. Ele forneceu a extensibilidade superior a
vrias bases de dados, protocolos e APIs. extensibilidade do PHP 3 atraiu muitos novos
desenvolvedores para o projeto.
Ao final de 1998, o PHP 3 j foi instalado em um escalonamento de 10% dos servidores web do
mundo.

Presente
Hoje, a linguagem PHP est evoluindo rapidamente e apoiada por dezenas de equipes de
desenvolvedores de todo o mundo. prticas de desenvolvimento mudaram tambm. No passado,
era prtica comum para gravar um arquivo PHP, envi-lo para um servidor de produo com FTP, e
espero que ele trabalhou. Esta uma estratgia de desenvolvimento terrvel, mas foi necessrio
devido falta de ambientes de desenvolvimento locais viveis.
Hoje em dia, ns evitamos o FTP e utilizamos controle de verso em vez disso. software de controle
de verso como Git ajudam a manter um histrico de cdigo auditvel que pode ser ramificada,
bifurcada, e se fundiram.
Ambientes de desenvolvimento locais so idnticos aos servidores de produo graas a
ferramentas de virtualizao como Vagrant e provisionamento ferramentas como Ansible, Chef e
Puppet.
Ns alavancagem especializada componentes PHP com o gerente de dependncia Composer .
Nosso cdigo PHP adere ao PSR - normas comunitrias geridas pelo Grupo PHP Framework
Interop. Ns absolutamente testamos nosso cdigo com ferramentas como o PHPUnit. Ns
implantar nossos aplicativos com PHP FastCGI gerente de processo atrs de um servidor web como
o nginx. E ns aumentamos o desempenho do aplicativo com um cache opcode.
PHP moderna engloba muitas prticas novas que podem ser desconhecidos para aqueles de vocs de
novo para PHP, ou para aqueles atualizando a partir de verses mais antigas do PHP. No se sinta
sobrecarregado. Eu andarei atravs de cada conceito mais adiante neste livro.
Eu tambm estou animado que o PHP tem agora um projecto de especificao oficial - algo que
faltava at 2014.

Nota
A maioria das linguagens de programao maduras tm uma especificao. Em termos leigos, a
especificao um modelo cannico que define o que significa ser PHP. Este plano
usado por desenvolvedores que criam programas que analisam, interpretar e executar cdigo PHP.
Isto no para desenvolvedores que criam aplicativos e sites com PHP.
Sara Golemon e Facebook anunciaram o projecto de primeira especificao PHP na O'Reilly de
conferncia OSCON em 2014. Voc pode ler o anncio oficial sobre o funcionamento interno do
PHP mailing list, e voc pode ler a especificao PHP no GitHub.
Uma especificao oficial linguagem PHP cada vez mais importante, dada a introduo
de mltiplos motores de PHP concorrentes. O motor de PHP original o Zend Engine, um PHP
intrprete escrito em C e introduzido no PHP 4. A Zend Engine foi criado por Rasmus
Lerdorf, Andi Gutmans, e Zeev Suraski. Hoje, a Zend Engine a Zend empresa de
A principal contribuio para a comunidade PHP. No entanto, existe agora uma segunda grande
motor PHP - a Mquina Virtual HipHop do Facebook. A garante especificao de linguagem
que ambos os motores de manter um grau de compatibilidade de linha de base.

Nota
Um motor de PHP um programa que analisa, interpreta e executa o cdigo PHP (por exemplo, o
Zend Motor ou HipHop Virtual Machine do Facebook). Isto no para ser confundido com PHP,
que uma referncia genrica para a linguagem PHP.

Futuro
A Zend Engine est melhorando em um ritmo rpido, com novas funcionalidades e melhor
desempenho. Eu atribuo as melhorias Zend Engine sua nova competio, especificamente HipHop
Virtual Machine do Facebook e linguagem de programao Hack .
Hack uma nova linguagem de programao construda em cima de PHP. Introduz tipagem
esttica, novas estruturas de dados e interfaces adicionais, mantendo a compatibilidade com verses
anteriores com cdigo PHP tipagem dinmica existente. Hack voltada para desenvolvedores que
apreciam PHP caractersticas rpido desenvolvimento, mas precisa da previsibilidade e estabilidade
da tipagem esttica.

Nota
Vamos discutir dinmica contra tipagem esttica mais adiante neste livro. A diferena entre o
dois quando os tipos de PHP so verificados. tipos dinmicos so verificados em tempo de
execuo, enquanto esttica tipos so verificados em tempo de compilao. Ir direto para o Captulo
12 para mais informaes.
O HipHop Virtual Machine (HHVM) um PHP e intrprete Hack que utiliza uma s no
time (JIT) para melhorar o desempenho do aplicativo e reduzir o uso de memria.
No prevejo Hack and HHVM substituindo o Zend Engine, mas o Facebook de novo
contribuies esto criando um respingo gigante na comunidade PHP. O aumento da concorrncia
fez com que a equipe principal Zend Engine para anunciar PHP 7, um Zend Engine otimizado
Diz-se que a par com HHVM. Vamos discutir estes desenvolvimentos ainda mais no Captulo 12.
um momento emocionante para ser um programador PHP. A comunidade PHP nunca foi to
energizado, divertida e inovadora. Espero que este livro ajuda voc firmemente abraar o PHP
prticas modernas. H uma tonelada de coisas novas para aprender, e muitas mais coisas no
horizonte.
Considere este o seu roteiro. Agora vamos comear.

Captulo 2. Caractersticas
A linguagem PHP moderna tem muitos novos recursos interessantes. Muitos desses recursos ser
novo para programadores PHP atualizao de verses anteriores, e eles vo ser uma boa
surpresa para programadores migrao para o PHP de outro idioma. Esses novos recursos
tornar a linguagem PHP uma plataforma poderosa e proporcionar uma experincia agradvel para
os aplicaes web de construo e ferramentas de linha de comando.
Algumas destas caractersticas no so essenciais, mas eles ainda facilitam nossas vidas. Alguns
recursos, contudo, so essenciais. Namespaces, por exemplo, so uma pedra angular do PHP
moderna normas e permitir prticas de desenvolvimento que os modernos desenvolvedores PHP
exame para concedido (Por exemplo, carregamento automtico). Vou apresentar cada novo recurso,
explicar por que til, e mostrar-lhe como implement-lo em seus prprios projetos.

Dica
Encorajo-vos a acompanhar no seu prprio computador. Voc pode encontrar todo o cdigo do texto
exemplos companheiro repositrio GitHub do livro.

Namespaces
Se h um moderno recurso de PHP eu quero que voc saiba, namespaces. introduzido em
PHP 5.3.0, namespaces so uma importante ferramenta que organiza o cdigo PHP em uma
hierarquia, comparvel a estrutura de diretrios do sistema de arquivos do seu sistema operacional.
Cada componente de PHP moderno e estrutura organiza seu cdigo globalmente sob a seu prprio
fornecedor namespace exclusivo para que no entre em conflito com, ou reclamar, classe comum
nomes usados por outros fornecedores.

Nota
Voc no odeia quando voc anda em uma loja de caf e essa pessoa detestvel tem uma
confuso de livros, cabos e outros enfeites espalhados por vrias mesas? Sem mencionar que ele
sentado ao lado, mas no usar, a nica tomada disponvel. Ele est perdendo espao valioso
que poderiam ser teis para voc. Figurativamente falando, essa pessoa no est usando
namespaces. No seja essa pessoa.
Vamos ver como um componente PHP do mundo real usa namespaces. O Framework Symfony
prprio symfony / HttpFoundation um componente PHP popular que gerencia solicitaes HTTP
e respostas. Mais importante, o componente symfony / HttpFoundation usa comum
nomes de classe PHP como Request, Response, e Cookie. Eu garanto que voc h muitos
outros componentes de PHP que usam os mesmos nomes de classe. Como podemos usar a
componente de PHP / HttpFoundation symfony se outro cdigo PHP usa os mesmos nomes de
classe?
Podemos usar com segurana o componente symfony / HttpFoundation precisamente porque seu
cdigo sandboxed abaixo do namespace nico fornecedor Symfony. Visite a
symfony componente HttpFoundation / no GitHub e navegue at o arquivo Response.php. isto
parece com a Figura 2-1.

Olhe atentamente para linha 12. Ele contm este cdigo:


namespace

Symfony\Component\HttpFoundation;

Esta uma declarao PHP namespace, e sempre aparece em uma nova linha imediatamente
aps a abertura tag <?php . Esta declarao de namespace em particular nos diz vrias coisas.
Em primeiro lugar, sabemos que a vida da classe Response abaixo do namespace fornecedor
Symfony (o fornecedor namespace o namespace de nvel superior). Sabemos que a classe
Response vive debaixo o subnamespace Component. Sabemos tambm as vidas de classe Response
abaixo ainda outra subnamespace chamado HttpFoundation. Voc pode ver outros arquivos
adjacentes Response.php, e voc vai ver que eles usam a mesma declarao de namespace. Um
espao para nome (ou subnamespace) encapsula e organiza classes PHP relacionados, assim como
um sistema de arquivos diretrio contm arquivos relacionados.

Dica
Subnamespaces so separados com um caractere \.
Ao contrrio do sistema de arquivos fsico do seu sistema operacional, namespaces PHP so um
conceito virtual e no necessariamente um mapa 1: 1 com diretrios de arquivos. Dito isto, a
maioria PHP componentes que, de fato, mapeia subnamespaces ao sistema de arquivos diretrios
para compatibilidade com o popular PSR-4 padro autoloader (falaremos mais sobre isso no
Captulo 3).
Nota Tecnicamente falando, namespaces so apenas uma notao linguagem PHP referenciado pelo
PHP intrprete para aplicar um prefixo do nome comum a um conjunto de classes, interfaces,
funes, e constantes.

Porque ns usamos Namespaces


Namespaces so importantes porque vamos criar o cdigo de rea restrita, que trabalha ao lado
cdigo de outros desenvolvedores. Este o conceito fundamental do componente PHP moderna
ecossistema. Componentes e quadro autores construir e distribuir o cdigo para um grande
nmero de desenvolvedores PHP, e eles tm nenhuma maneira de saber ou controlar o que as
classes,
interfaces, funes e constantes so usados juntamente com o seu prprio cdigo. Esse problema
aplica-se a seus prprios projetos em casa, tambm. Se voc escrever componentes personalizados
do PHP ou
classes para um projeto, que o cdigo deve trabalhar ao lado de terceiros do seu projeto
dependncias.
Como mencionei anteriormente com o componente symfony / HttpFoundation, seu cdigo e
cdigo de outros desenvolvedores podem usar a mesma classe, interface, funo ou nomes de
constantes.
Sem espaos de nomes, um nome de coliso faz com que o PHP falhe. Com namespaces, seu
cdigo e cdigo de outros desenvolvedores podem usar a mesma classe, interface, funo ou nome
de constante assumindo que o seu cdigo vive debaixo de um namespace fornecedor nico.
Se voc est construindo um pequeno projeto pessoal com apenas algumas dependncias, nome da
classe closures provavelmente no ser um problema. Mas quando voc est trabalhando com uma
equipe de construo de uma grande

projeto com inmeras dependncias de terceiros, closures de nomes tornam-se uma preocupao
real. Voc no pode controlar quais classes, interfaces, funes e constantes so
introduzidas no espao global por dependncias do seu projeto. Isso por que
namespacing seu cdigo importante.

Declarao
Cada classe PHP, interface, funo e vidas constantes abaixo de um espao de nomes (ou
subnamespace). Namespaces so declaradas na parte superior de um arquivo PHP em uma nova
linha imediatamente aps a abertura tag <? php. A declarao namespace comea com
namespace, em seguida, um caractere de espao, ento o nome do espao para nome, e depois um
fechamento ponto e vrgula ; .
Lembre-se que namespaces so muitas vezes utilizados para estabelecer um nome do fornecedor de
nvel superior. Este exemplo de declarao namespace estabelece o nome do fornecedor Oreilly:
<?php
namespace Oreilly;
Todos as classes PHP, interfaces, funes ou constantes declaradas abaixo desta declarao
namespace de viver no namespace Oreilly e so, de alguma forma, relacionados com O'Reilly
Meios de comunicao. O que se queria para organizar o cdigo relacionado com este livro? Ns
usamos um subnamespace.
Subnamespaces so declarados exactamente o mesmo que no exemplo anterior. O nico
diferena que ns separar nomes de namespace e subnamespace com a \ personagem.
O exemplo a seguir declara uma subnamespace chamado ModernPHP que vive abaixo da
superior Oreilly namespace fornecedor:
<?php
namespace Oreilly\ModernPHP;
Todas as classes, interfaces, funes e constantes declaradas abaixo desta namespace
declarao de viver no subnamespace Oreilly \ ModernPHP e so, de alguma forma, relacionado
com
este livro.
Todas as classes no mesmo espao para nome ou subnamespace no tem que ser declarado na
mesma
arquivo PHP. Voc pode especificar um espao para nome ou subnamespace no topo de qualquer
arquivo PHP, e
cdigo que do arquivo torna-se uma parte desse espao de nomes ou subnamespace. Isto torna
possvel
para escrever vrias classes em arquivos separados que pertencem a um namespace comum.
Dica
O namespace mais importante o namespace fornecedor. Este o namespace de nvel superior
que identifica a sua marca ou organizao, e deve ser globalmente nicos. subnamespaces
so menos importantes, mas eles so teis para a organizao de cdigo do seu projeto.