Sie sind auf Seite 1von 7

LIVRO PHP MODERNO

Capítulo 1. O Novo PHP

A linguagem PHP está experimentando um renascimento. PHP está se transformando em uma


linguagem de script moderna com características úteis, como namespaces, traits, closures , e um
 built-in opcode cache.
cache. O moderno ecossistema PHP
PHP está evoluindo
evoluindo tambm.
tambm. desenvolvedores
desenvolvedores PHP
dependem menos de estruturas monolíticas e mais em componentes especiali!ados
especiali!ados menores. o
"omposer gerente de depend#ncia está revolucionando a forma como vamos construir aplica$%es
PHP& 'ue nos emancipa do (ardim murado de um 'uadro e nos permite misturar e combinar PHP
interoperável
interop erável componentes mais ade'uados para as nossas aplica$%es personali!adas PHP.
PHP.
interoperabilidade dos componentes n)o seria possível sem os padr%es da comunidade proposto e
com curadoria do *rame+o PHP rupo nterop.
PHP moderno  o seu guia para o novo PHP, e vai mostrar-lhe como construir e implantar 
aplica$%es surpreendentes
surpreendentes com PHP usando padr%es da comunidade, boas práticas, e componentes
interoperáveis.

Passado

Antes de explorarmos o PHP moderno,  importante compreender a origem do PHP. PHP  uma
linguagem interpretadora de script do lado do servidor. sto significa 'ue voc# escreve c/digo PHP,
envia ele para um servidor +eb, e executa com um intrprete. PHP  normalmente usada com um
servidor +eb Apache
Apache ou nginx para servir conteúdo din0mico. 1o entanto, PHP tambm podem ser
usados para construir aplica$%es de linha de comando poderosos 2como bash, 3ub4, P4thon,
P4thon, e assim
 por diante5. 6uitos desenvolvedores
desenvolvedores PHP n)o
n)o percebem isso
isso e perdem uma característica
característica muito
emocionante. 1)o  voc#, apesar de tudo.
7oc# pode ler a hist/ria oficial do PHP na página http899php.net9manual9histor4.php.php. :u n)o vou
repetir o 'ue (á foi dito t)o bem por 3asmus ;erdorf 2o criador do PHP5. O 'ue eu
vou di!er-lhe  'ue o PHP tem um passado tumultuado. PHP come$ou
come$ou como uma cole$)o de scripts
" escrito por 3asmus ;erdorf para rastrear as visitas ao seu currículo online. ;erdorf nomeou seu
con(unto de scripts " <Personal Home Page =ools.<
=ools.< :sta primeira encarna$)o foi completamente
diferente a partir do PHP 'ue conhecemos ho(e. A primeiras ferramentas PHP de ;erdorf n)o eram
uma linguagem de script& eles eram ferramentas 'ue forneceram variáveis rudimentares e variável
forma automáticainterpreta$)o usando uma sintaxe embutida no H=6;.
:ntre >??@ e >??, PHP sofreu inúmeras revis%es e ainda recebeu alguns
reescreve ground-up . Andi utmans e Beev Curasi, dois desenvolvedores de =el Aviv,
 (untoram for$as com 3asmus ;erdorf parapara transformar PHP a partir de uma pe'uena
pe'uena cole$)o
cole$)o de
ferramentas de " em uma linguagem de programa$)o completa com uma sintaxe mais
consistente e suporte básico para programa$)o orientada a ob(etos. :les nomearam seu PHP produto
final D e lan$aram no final de >??. O novo apelido PHP foi uma partida de nomes anteriores, e 
uma recursiva acrEnimo para PHP8 H4pertext Preprocessor. PHP D foi a primeira vers)o 'ue a
maioria assemelhava ao PHP 'ue n/s conhecemos ho(e. :le forneceu a extensibilidade superior a
várias bases de dados, protocolos e APs. extensibilidade do PHP D atraiu muitos novos
desenvolvedores
desenvolvedores para o pro(eto.
Ao final de >??, o PHP D (á foi instalado em um escalonamento
escalonamento de >FG dos servidores +eb do
mundo.
Presente

Ho(e, a linguagem PHP está evoluindo rapidamente e  apoiada por de!enas de e'uipes de
desenvolvedores de todo o mundo. práticas de desenvolvimento mudaram tambm. 1o passado,
era prática comum para gravar um ar'uivo PHP, enviá-lo para um servidor de produ$)o com *=P, e
espero 'ue ele trabalhou. :sta  uma estratgia de desenvolvimento terrível, mas foi necessário
devido  falta de ambientes de desenvolvimento locais viáveis.
Ho(e em dia, n/s evitamos o *=P e utili!amos controle de vers)o em ve! disso. soft+are de controle
de vers)o como it a(udam a manter um hist/rico de c/digo auditável 'ue pode ser ramificada,
 bifurcada, e se fundiram.
Ambientes de desenvolvimento locais s)o id#nticos aos servidores de produ$)o gra$as a
ferramentas de virtuali!a$)o como 7agrant e provisionamento ferramentas como Ansible, "hef e
Puppet.
 1/s alavancagem especiali!ada componentes PHP com o gerente de depend#ncia "omposer .
 1osso c/digo PHP adere ao PC3 - normas comunitárias geridas pelo rupo PHP *rame+or
nterop. 1/s absolutamente testamos nosso c/digo com ferramentas como o PHPInit. 1/s
implantar nossos aplicativos com PHP *ast" gerente de processo atrás de um servidor +eb como
o nginx. : n/s aumentamos o desempenho do aplicativo com um cache opcode.
PHP moderna engloba muitas práticas novas 'ue podem ser desconhecidos para a'ueles de voc#s de
novo para PHP, ou para a'ueles atuali!ando a partir de vers%es mais antigas do PHP. 1)o se sinta
sobrecarregado. :u andarei atravs de cada conceito mais adiante neste livro.
:u tambm estou animado 'ue o PHP tem agora um pro(ecto de especifica$)o oficial - algo 'ue
faltava at JF>@.

Nota

A maioria das linguagens de programa$)o maduras t#m uma especifica$)o. :m termos leigos, a
especifica$)o  um modelo canEnico 'ue define o 'ue significa ser PHP. :ste plano
 usado por desenvolvedores 'ue criam programas 'ue analisam, interpretar e executar c/digo PHP.
sto n)o  para desenvolvedores 'ue criam aplicativos e sites com PHP.
Cara olemon e *aceboo anunciaram o pro(ecto de primeira especifica$)o PHP na OK3eill4 de
confer#ncia OC"O1 em JF>@. 7oc# pode ler o anúncio oficial sobre o funcionamento interno do
PHP mailing list, e voc# pode ler a especifica$)o PHP no itHub.
Ima especifica$)o oficial linguagem PHP  cada ve! mais importante, dada a introdu$)o
de múltiplos motores de PHP concorrentes. O motor de PHP original  o Bend :ngine, um PHP
intrprete escrito em " e introdu!ido no PHP @. A Bend :ngine foi criado por 3asmus
;erdorf, Andi utmans, e Beev Curasi. Ho(e, a Bend :ngine  a Bend empresa de
A principal contribui$)o para a comunidade PHP. 1o entanto, existe agora uma segunda grande
motor PHP - a 6á'uina 7irtual HipHop do *aceboo. A garante especifica$)o de linguagem
'ue ambos os motores de manter um grau de compatibilidade de linha de base.

Nota

Im motor de PHP  um programa 'ue analisa, interpreta e executa o c/digo PHP 2por exemplo, o
Bend 6otor ou HipHop 7irtual 6achine do *aceboo5. sto n)o  para ser confundido com PHP,
'ue  uma refer#ncia genrica para a linguagem PHP.
Futuro

A Bend :ngine está melhorando em um ritmo rápido, com novas funcionalidades e melhor 
desempenho. :u atribuo as melhorias Bend :ngine  sua nova competi$)o, especificamente HipHop
7irtual 6achine do *aceboo e linguagem de programa$)o Hac .
Hac  uma nova linguagem de programa$)o construída em cima de PHP. ntrodu! tipagem
estática, novas estruturas de dados e interfaces adicionais, mantendo a compatibilidade com vers%es
anteriores com c/digo PHP tipagem din0mica existente. Hac  voltada para desenvolvedores 'ue
apreciam PHP características rápido desenvolvimento, mas precisa da previsibilidade e estabilidade
da tipagem estática.

Nota

7amos discutir din0mica contra tipagem estática mais adiante neste livro. A diferen$a entre o
dois  'uando os tipos de PHP s)o verificados. tipos din0micos s)o verificados em tempo de
execu$)o, en'uanto estática tipos s)o verificados em tempo de compila$)o. r direto para o "apítulo
>J para mais informa$%es.

O HipHop 7irtual 6achine 2HH765  um PHP e intrprete Hac 'ue utili!a uma s/ no
time 2L=5 para melhorar o desempenho do aplicativo e redu!ir o uso de mem/ria.
 1)o preve(o Hac and HH76 substituindo o Bend :ngine, mas o *aceboo de novo
contribui$%es est)o criando um respingo gigante na comunidade PHP. O aumento da concorr#ncia
fe! com 'ue a e'uipe principal Bend :ngine para anunciar PHP M, um Bend :ngine otimi!ado
Ni!-se 'ue a par com HH76. 7amos discutir estes desenvolvimentos ainda mais no "apítulo >J.
 um momento emocionante para ser um programador PHP. A comunidade PHP nunca foi t)o
energi!ado, divertida e inovadora. :spero 'ue este livro a(uda voc# firmemente abra$ar o PHP
 práticas modernas. Há uma tonelada de coisas novas para aprender, e muitas mais coisas no
hori!onte.
"onsidere este o seu roteiro. Agora vamos come$ar.
Capítulo 2. Características

A linguagem PHP moderna tem muitos novos recursos interessantes. 6uitos desses recursos será
novo para programadores PHP atuali!a$)o de vers%es anteriores, e eles v)o ser uma boa
surpresa para programadores migra$)o para o PHP de outro idioma. :sses novos recursos
tornar a linguagem PHP uma plataforma poderosa e proporcionar uma experi#ncia agradável para
os aplica$%es +eb de constru$)o e ferramentas de linha de comando.
Algumas destas características n)o s)o essenciais, mas eles ainda facilitam nossas vidas. Alguns
recursos, contudo, s)o essenciais. 1amespaces, por exemplo, s)o uma pedra angular do PHP
moderna normas e permitir práticas de desenvolvimento 'ue os modernos desenvolvedores PHP
exame para concedido 2Por exemplo, carregamento automático5. 7ou apresentar cada novo recurso,
explicar por 'ue  útil, e mostrar-lhe como implementá-lo em seus pr/prios pro(etos.

Dica
:ncora(o-vos a acompanhar no seu pr/prio computador. 7oc# pode encontrar todo o c/digo do texto
exemplos companheiro reposit/rio itHub do livro.

Namespaces

Ce há um moderno recurso de PHP eu 'uero 'ue voc# saiba,  namespaces. introdu!ido em


PHP .D.F, namespaces s)o uma importante ferramenta 'ue organi!a o c/digo PHP em uma
hierar'uia, comparável a estrutura de diret/rios do sistema de ar'uivos do seu sistema operacional.
"ada componente de PHP moderno e estrutura organi!a seu c/digo globalmente sob a seu pr/prio
fornecedor namespace exclusivo para 'ue n)o entre em conflito com, ou reclamar, classe comum
nomes usados por outros fornecedores.

Nota

7oc# n)o odeia 'uando voc# anda em uma lo(a de caf e essa pessoa detestável tem uma
confus)o de livros, cabos e outros enfeites espalhados por várias mesasQ Cem mencionar 'ue ele 
sentado ao lado, mas n)o usar, a única tomada disponível. :le está perdendo espa$o valioso
'ue poderiam ser úteis para voc#. *igurativamente falando, essa pessoa n)o está usando
namespaces. 1)o se(a essa pessoa.

7amos ver como um componente PHP do mundo real usa namespaces. O *rame+or C4mfon4
 pr/prio s4mfon4 9 Http*oundation  um componente PHP popular 'ue gerencia solicita$%es H==P
e respostas. 6ais importante, o componente s4mfon4 9 Http*oundation usa comum
nomes de classe PHP como 3e'uest, 3esponse, e "ooie. :u garanto 'ue voc# há muitos
outros componentes de PHP 'ue usam os mesmos nomes de classe. "omo podemos usar a
componente de PHP 9 Http*oundation s4mfon4 se outro c/digo PHP usa os mesmos nomes de
classeQ
Podemos usar com seguran$a o componente s4mfon4 9 Http*oundation precisamente por'ue seu
c/digo  sandboxed abaixo do namespace único fornecedor C4mfon4. 7isite a
s4mfon4 componente Http*oundation 9 no itHub e navegue at o ar'uivo 3esponse.php. isto
 parece com a *igura J->.
Olhe atentamente para linha >J. :le contm este c/digo8

namespace SymfonyComponentHttp!oun"at#on$

:sta  uma declara$)o PHP namespace, e sempre aparece em uma nova linha imediatamente
ap/s a abertura tag RQphp . :sta declara$)o de namespace em particular nos di! várias coisas.
:m primeiro lugar, sabemos 'ue a vida da classe 3esponse abaixo do namespace fornecedor
C4mfon4 2o fornecedor namespace  o namespace de nível superior5. Cabemos 'ue a classe
3esponse vive debaixo o subnamespace "omponent. Cabemos tambm as vidas de classe 3esponse
abaixo ainda outra subnamespace chamado Http*oundation. 7oc# pode ver outros ar'uivos
ad(acentes 3esponse.php, e voc# vai ver 'ue eles usam a mesma declara$)o de namespace. Im
espa$o para nome 2ou subnamespace5 encapsula e organi!a classes PHP relacionados, assim como
um sistema de ar'uivos diret/rio contm ar'uivos relacionados.

Dica

Cubnamespaces s)o separados com um caractere S.


Ao contrário do sistema de ar'uivos físico do seu sistema operacional, namespaces PHP s)o um
conceito virtual e n)o necessariamente um mapa >8 > com diret/rios de ar'uivos. Nito isto, a
maioria PHP componentes 'ue, de fato, mapeia subnamespaces ao sistema de ar'uivos diret/rios
 para compatibilidade com o popular PC3-@ padr)o autoloader 2falaremos mais sobre isso no
"apítulo D5.
 1ota =ecnicamente falando, namespaces s)o apenas uma nota$)o linguagem PHP referenciado pelo
PHP intrprete para aplicar um prefixo do nome comum a um con(unto de classes, interfaces,
fun$%es, e constantes.

Porque nós usamos Namespaces

 1amespaces s)o importantes por'ue vamos criar o c/digo de área restrita, 'ue trabalha ao lado
c/digo de outros desenvolvedores. :ste  o conceito fundamental do componente PHP moderna
ecossistema. "omponentes e 'uadro autores construir e distribuir o c/digo para um grande
número de desenvolvedores PHP, e eles t#m nenhuma maneira de saber ou controlar o 'ue as
classes,
interfaces, fun$%es e constantes s)o usados (untamente com o seu pr/prio c/digo. :sse problema
aplica-se a seus pr/prios pro(etos em casa, tambm. Ce voc# escrever componentes personali!ados
do PHP ou
classes para um pro(eto, 'ue o c/digo deve trabalhar ao lado de terceiros do seu pro(eto
depend#ncias.
"omo mencionei anteriormente com o componente s4mfon4 9 Http*oundation, seu c/digo e
c/digo de outros desenvolvedores podem usar a mesma classe, interface, fun$)o ou nomes de
constantes.
Cem espa$os de nomes, um nome de colis)o fa! com 'ue o PHP falhe. "om namespaces, seu
c/digo e c/digo de outros desenvolvedores podem usar a mesma classe, interface, fun$)o ou nome
de constante assumindo 'ue o seu c/digo vive debaixo de um namespace fornecedor único.
Ce voc# está construindo um pe'ueno pro(eto pessoal com apenas algumas depend#ncias, nome da
classe closures provavelmente n)o será um problema. 6as 'uando voc# está trabalhando com uma
e'uipe de constru$)o de uma grande
 pro(eto com inúmeras depend#ncias de terceiros, closures de nomes tornam-se uma preocupa$)o
real. 7oc# n)o pode controlar 'uais classes, interfaces, fun$%es e constantes s)o
introdu!idas no espa$o global por depend#ncias do seu pro(eto. sso  por 'ue
namespacing seu c/digo  importante.

Declaração

"ada classe PHP, interface, fun$)o e vidas constantes abaixo de um espa$o de nomes 2ou
subnamespace5. 1amespaces s)o declaradas na parte superior de um ar'uivo PHP em uma nova
linha imediatamente ap/s a abertura tag RQ php. A declara$)o namespace come$a com
namespace, em seguida, um caractere de espa$o, ent)o o nome do espa$o para nome, e depois um
fechamento ponto e vírgula & .
;embre-se 'ue namespaces s)o muitas ve!es utili!ados para estabelecer um nome do fornecedor de
nível superior. :ste exemplo de declara$)o namespace estabelece o nome do fornecedor Oreill48

%&p'p
namespace O(e#lly$

=odos as classes PHP, interfaces, fun$%es ou constantes declaradas abaixo desta declara$)o
namespace de viver no namespace Oreill4 e s)o, de alguma forma, relacionados com OK3eill4
6eios de comunica$)o. O 'ue se 'ueria para organi!ar o c/digo relacionado com este livroQ 1/s
usamos um subnamespace.
Cubnamespaces s)o declarados exactamente o mesmo 'ue no exemplo anterior. O único
diferen$a  'ue n/s separar nomes de namespace e subnamespace com a S personagem.
O exemplo a seguir declara uma subnamespace chamado 6odernPHP 'ue vive abaixo da
superior Oreill4 namespace fornecedor8

%&p'p
namespace O(e#llyMo"e(nPHP$

=odas as classes, interfaces, fun$%es e constantes declaradas abaixo desta namespace


declara$)o de viver no subnamespace Oreill4 S 6odernPHP e s)o, de alguma forma, relacionado
com
este livro.
=odas as classes no mesmo espa$o para nome ou subnamespace n)o tem 'ue ser declarado na
mesma
ar'uivo PHP. 7oc# pode especificar um espa$o para nome ou subnamespace no topo de 'ual'uer
ar'uivo PHP, e
c/digo 'ue do ar'uivo torna-se uma parte desse espa$o de nomes ou subnamespace. sto torna
 possível
 para escrever várias classes em ar'uivos separados 'ue pertencem a um namespace comum.
Nica
O namespace mais importante  o namespace fornecedor. :ste  o namespace de nível superior 
'ue identifica a sua marca ou organi!a$)o, e deve ser globalmente únicos. subnamespaces
s)o menos importantes, mas eles s)o úteis para a organi!a$)o de c/digo do seu pro(eto.

Das könnte Ihnen auch gefallen