Beruflich Dokumente
Kultur Dokumente
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 intrprete. PHP normalmente usada com um
servidor +eb Apache
Apache ou nginx para servir conteúdo din0mico. 1o entanto, PHP tambm 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 Curasi, 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 APs. 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 tambm. 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 estratgia 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 atravs de cada conceito mais adiante neste livro.
:u tambm 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
intrprete escrito em " e introdu!ido no PHP @. A Bend :ngine foi criado por 3asmus
;erdorf, Andi utmans, e Beev Curasi. 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 *aceboo5. sto n)o para ser confundido com PHP,
'ue uma refer#ncia genrica 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 intrprete 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
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 "ooie. :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 contm este c/digo8
namespace SymfonyComponentHttp!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 tambm 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 contm ar'uivos relacionados.
Dica
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, tambm. 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#llyMo"e(nPHP$