Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Estruturas de PHP, Parte 1: Introdução a Três Estruturas Populares

Zend, symfony, CakePHP

Duane O'Brien, PHP developer, Freelance
Duane O'Brien é um canivete suíço tecnológico desde quando The Oregon Trail era somente texto. Sua comida favorita é sushi. Ele nunca esteve na lua.

Resumo:  Há alguns anos, uma das críticas mais comuns sobre PHP era que não suportava arquiteturas no estilo MVC. Os tempos são outros. E, hoje em dia, há diversas opções disponíveis no mundo de estruturas PHP. Esta série dá uma olhada em três estruturas PHP amplamente usadas — Zend, symfony e CakePHP — examinando suas semelhanças e diferenças enquanto constrói e estende um aplicativo de amostra em cada uma das três estruturas.

Visualizar mais conteúdo nesta série

Data:  09/Out/2007
Nível:  Intermediário
Atividade:  1902 visualizações
Comentários:  


Sobre essa Série

Esta série foi projetada para desenvolvedores de PHP que desejam começar a usar uma estrutura, mas não examinaram as estruturas disponíveis em detalhes. Esta série examina por que as três estruturas que estão sendo examinadas foram escolhidas, como instalar cada uma das estruturas e você terá uma boa ideia do aplicativo de teste que irá estender em cada estrutura. Pode parecer muito, mas não se preocupe — dividimos em partes gerenciáveis.

A Parte 1 desta série determina o escopo para a série, introduz as estruturas que estão sendo examinadas, cobre a instalação e retira do escopo o primeiro aplicativo de teste que você irá construir. (Ufa!)

Parte 2 o direciona pela construção do aplicativo de amostra em cada uma das três estruturas, realçando suas semelhanças e diferenças.

Parte 3 inicia com a extensão do aplicativo de teste, em seguida, lida com exceções à regra. Todas as estruturas funcionam bem ao executarem as tarefas para as quais foram projetadas. Precisar fazer algo que a estrutura não foi construída para fazer ocorre em todo projeto. Este artigo verifica essas instâncias.

Parte 4 foca principalmente em suporte ao Ajax. O uso do Ajax, usando código nativo e bibliotecas de terceiros, é examinado — especificamente, como cada estrutura se comporta e aceita bibliotecas populares específicas.

Parte 5 lida com o trabalho fora das estruturas. Uma única tarefa é identificada (script de atualização noturna) e o processo para realizar essa tarefa é examinado em cada estrutura.


Sobre este Artigo

Este artigo tem muito material. Você deve obter velocidade rapidamente. Há três estruturas sendo examinadas. Quais três? Por que essas três? Quais outras estruturas existem? Por que não essas, em vez de aquelas? Tantas perguntas! Mas a maioria delas será respondida antes de você passar pelo processo de instalação de cada estrutura. Em seguida, você aprenderá sobre o aplicativo de teste usado nas partes subsequentes desta série. Imediatamente, você começará a obter um senso de como as diferentes estruturas funcionam de forma diferente e os tipos de coisas que fazem iguais.

Requisitos do Sistema

Antes de iniciar, é necessário ter um ambiente no qual é possível trabalhar. Os requisitos são mínimos:

  1. Um servidor HTTP que suporta sessões (e preferivelmente mod_rewrite) — Esta série foi escrita usando o Apache V1.3 com mod_rewrite ativado.
  2. PHP V5.1.4 ou posterior — Nem todas as estruturas que estão sendo examinadas requerem esse nível de release de PHP, mas, por questão de facilidade, todas as estruturas usarão a mesma instalação PHP. Essa série foi escrita usando PHP V5.2.3.
  3. Uma instalação razoavelmente recente de MySQL — Diversas outras opções de banco de dados estão disponíveis e são suportadas, mas esta série e o aplicativo de amostra foram escritos usando MySQL V5.0.37.
  4. Um sistema operacional que suporta o PHP V5.2.4 ou posterior e MySQL — Chamadas do sistema Linux® é usado nesta série. Se você for um usuário do Windows® , será necessário fazer ajustes óbvios, principalmente ao criar os diretórios mencionados abaixo.

Pré-requisitos

Supõe-se que você já conheça o PHP, o design do aplicativo e como trabalhar em um banco de dados. Não é necessário ter usado uma estrutura antes, mas você deve, certamente, estar pronto para entrar de cabeça nisso.


Estruturas para Simulados

Antes de falar sobre quais estruturas foram selecionadas, vale a pena falar sobre o que é uma estrutura.

A idéia por trás de uma estrutura é oferecer um design que pode ser usado em diversos aplicativos. Todos os aplicativos têm diversas itens básicos em comum — especificamente, algum tipo de interface com um banco de dados, alguma lógica de aplicativo, algo que apresente o aplicativo para o usuário. Se você tiver escrito muitos aplicativos PHP, você conhece a aparência. Você provavelmente escreveu um conjunto de funções ou uma classe que lê e grava dados a partir do banco de dados. Você pode ter usado um mecanismo de modelo como o Smarty para gerenciar sua UI. Você certamente escreveu um monte de código PHP que fazia coisas como analisar envios de formulários e tomar decisões baseadas nos dados enviados. E se você tiver escrito muito aplicativos, provavelmente fez as mesmas coisas básicas repetidamente, às vezes roubando código de um aplicativo para usar em outro.

Uma estrutura é projetada para fornecer uma estrutura para esses elementos comuns (iteração de banco de dados, camada de apresentação, lógica de aplicativo) para que você gaste menos tempo escrevendo o código da interface do banco de dados ou as interfaces da camada de apresentação e mais tempo escrevendo o próprio aplicativo. A arquitetura representada pela divisão de um aplicativo dessa maneira é chamada de Model-View-Controller (MVC). Model refere-se a seus dados, View à sua camada de apresentação e Controller refere-se à lógica do aplicativo ou de negócios. Uma discussão completa sobre MVC está fora do escopo deste artigo, mas você deve pesquisar sobre MVC e entender por que tanta comoção (consulte Recursos).


Selecionando uma Estrutura

Há diversas estruturas disponíveis para praticamente toda linguagem. Selecionar a certa para as suas necessidades pode ser um tanto quanto difícil, principalmente se não tiver usado nenhuma delas antes. Apesar de conselhos e opiniões de coletas e autores confiáveis do developerWorks poderem ser úteis nessa área, há, na verdade, somente um princípio direcional que deve ser seguido ao selecionar qualquer estrutura: uma estrutura é tão boa somente quanto o tempo e esforço que economiza para todos. Uma estrutura não é boa se funcionar bem para você, mas causar um aumento significativo em chamadas de suporte. Uma estrutura não é boa se for fácil de suportar, mas obstrui, em vez de ajudar, seu desenvolvimento. Uma estrutura é inútil se for elegante, mas causa problemas de suporte e desenvolvimento.

Ao selecionar uma estrutura para seu projeto, considere todos os envolvidos, de cima até em baixo, e ao avaliar a estrutura, tenha o impacto em terceiros em mente.

Ao considerar a adoção de uma estrutura, olhe seu aplicativo de perto e pergunte-se se ele precisa de uma estrutura. Uma estrutura não é uma necessidade. Os aplicativos corporativos continuarão a ser escritos sem o uso de estruturas. Uma estrutura ajudará no projeto? Economizará tempo e esforço de todos? Seu aplicativo terá melhor desempenho em uma estrutura? Fornecerá a estabilidade que está faltando? Se a resposta para qualquer uma dessas perguntas for sim, você deve considerar a adoção de uma estrutura. Se a resposta a todas essas perguntas for não, uma estrutura somente complicará as questões.

Infelizmente, restrições de tamanho e escopo não permitem uma cobertura abrangente de todas as estruturas PHP disponíveis. Esta série foca três estruturas:

  • Zend Framework
  • symfony
  • CakePHP

Elas foram selecionadas com base em diversos fatores, mas podem ser melhor classificadas como "A Conhecida por seu Chefe", "A que Outra Pessoa Já Instalou" e "Aquela sobre a qual Eles Estavam Falando". Eu incentivo você a pesquisar CodeIgniter, Seagull, Web Application Component Toolkit (WACT), PRADO, Zoop, PHP on Trax ou qualquer uma das muitas estruturas PHP disponíveis. A seleção da estrutura é uma opção muito pessoal, muito semelhante à seleção da linguagem na qual escrever o código. Esta série não irá indicar qual estrutura é melhor, ou pior, do que as outras. Onde uma estrutura faz algo bem, será destacado. Onde uma estrutura parecer difícil de gerenciar, isso será destacado também. Mesmo se não formos abrangentes em nossa cobertura das estruturas em miríade, a abordagem feita ajudará a pesar os pontos fortes e fracos das outras estruturas. Você precisa formar suas próprias opiniões sobre as estruturas que estão sendo examinadas, quais você gosta e o que você decide seguir.

Zend Framework

Todos conhecem a Zend — "A Empresa PHP". Ao fazer download e instalar PHP, você está transferindo por download da Zend e faz isso desde por volta da V3. Além de distribuir PHP, a Zend Technologies tem oferecido uma ampla gama de tecnologias de suporte para PHP ao longo dos anos. Não deve ser nenhuma surpresa que a Zend ofereça uma estrutura para PHP — uma popular, com 2 milhões de downloads até a presente data. Se seu chefe ouviu falar de uma estrutura PHP, provavelmente, a Zend Framework é a própria.

symfony

Patrocinada pela Sensio, a symfony "almeja acelerar a criação e manutenção de aplicativos da Web e substituir as tarefas de codificação repetitivas por poder, controle e prazer". A estrutura da symfony foi usada em todo o mundo em diversos aplicativos de nível corporativo, provavelmente, com maior destaque em Askeet e Yahoo! Bookmarks. Grande chance de, se alguém que você conhece tiver instalado, usado ou brincado com uma estrutura PHP, essa estrutura ser a symfony.

CakePHP

Pegando muito emprestado de Ruby on Rails, CakePHP almeja trazer simplicidade e escalabilidade para as estruturas PHP. Reconhecida de forma consistente como uma estrutura PHP de ponta, a CakePHP foi recentemente selecionada como o núcleo da V5 do Mambo Content Management System. Direcionada por uma forte comunidade e uma base de usuários de crescimento rápido, a popularidade da CakePHP está crescendo de forma contínua. Se tiver ouvido uma conversa sobre estruturas PHP, essa conversa era, provavelmente, sobre CakePHP.


Instalação

Cada uma das estruturas tem seu próprio conjunto de instruções de instalação e uma discussão completa dos detalhes da instalação está fora do escopo deste artigo. Cada instalação será ressaltada, destacando-se os pontos altos que podem não ser cobertos nas instruções de instalação de cada estrutura individual ou quando um desvio dessa instruções for necessário devido aos detalhes da instalação de todas as três em uma única máquina.

Comece criando uma pasta para conter todo o código, estruturas e inclusões necessários para esta série (por exemplo, um diretório chamado /column). Nesse diretório, crie quatro diretórios adicionais: htdocs, protected, include e src. Edite seu arquivo conf do Apache de forma que a raiz do documento aponte para /column/htdocs — e, enquanto estiver lá (se ainda não tiver feito), deve ativar mod_rewrite. Edite seu arquivo conf php.ini para incluir o diretório /column/include/ na diretiva include_path. Não se preocupe se isso ainda não fizer sentido. À medida que você instala as estruturas, tudo ficará claro.

Instalando a Zend Framework

Faça download da Zend Framework (consulte Recursos). Esta série foi escrita usando a V1.0.1. Faça download e descompacte a Zend Framework no diretório /column/src. A distribuição conterá diversos arquivos de texto e três diretórios: demos, tests e library. Copie o conteúdo do diretório library (deve ser apenas uma pasta chamada Zend) no diretório /column/include/. Agora, você deve ter uma pasta chamada /column/include/Zend que contém diversos diretórios e arquivos. Essas são as bibliotecas usadas pela Zend Framework.

É isso! Você instalou a Zend Framework.

Instalando a symfony

Faça download da symfony (consulte Recursos). Você está livre para instalar a symfony através de qualquer um dos métodos listados na página de download, apesar de que para nossos propósitos, recomenda-se fazer download do tarball. Descompacte o tarball no diretório /column/src/symfony/. Você deve acabar com quatro diretórios (data, doc, lib e licenses), assim como alguns documentos LEIA-ME. Nem todos eles são necessários para a instalação de um aplicativo concluído, mas por hora, eles serão adequados. Isso pode parecer muito simples para uma instalação. Lembre-se de que essas estruturas geralmente consistem em utilitários e bibliotecas, portanto, instalá-las não é difícil. Para usá-las, será necessário um pouco mais de configuração. Isso ficará claro posteriormente.

Nem todos têm a opção de usar a instalação PHP Extension and Application Repository (PEAR) em seu ambiente, por isso fazemos referência ao método de instalação acima. No entanto, se você puder usar PEAR, definitivamente, use-o. Ambos os métodos estão descritos na página de instalação da symfony (consulte Recursos).

Instalando CakePHP

Faça download da CakePHP (consulte Recursos). Essa série foi escrita usando a versão 1.2.0.5427alpha. A ramificação 1.2 da CakePHP, apesar de ser uma alfa madura, foi amplamente adotada pela comunidade CakePHP como norma. Faça download e descompacte o tarball, colocando o conteúdo em /column/src/cakephp. Você deve acabar com quatro diretórios (app, cake, doc e vendors), assim como dois arquivos (.htaccess e index.php). Você estará movendo alguns desses arquivos posteriormente, mas por hora isso está OK.


O Aplicativo de Teste

Você transferiu por download e instalou três estruturas. Mas perceberá que ainda não fez realmente nada com elas ainda, como verificar as instalações com um aplicativo Hello World. Isso é porque você vai passar direto pelo Hello World e seguir para algo mais substancioso (mas não muito mais).

Construir um aplicativo Hello World em uma estrutura PHP pode ser um pouco complicado. Usar uma estrutura envolve algum gasto adicional e esse gasto adicional atrapalha quando está tentando fazer algo simples, como o Hello World. Mas esse mesmo gasto adicional deve parecer como uma despesa bem feita ao lidar com aplicativos mais complicados.

O aplicativo de teste que você irá construir não é muito — ainda. Permitirá que você faça postagem de texto no aplicativo usando uma área de texto. Esse texto será salvo em um banco de dados e recuperado pelo aplicativo para exibição por solicitação. Ao usar esse tipo de aplicativo, seria possível criar e atualizar conteúdo facilmente em um Web site sem precisar editar HTML nem fazer upload de novos arquivos. Esse aplicativo altamente inovador e original será chamado Blahg.

Qual é a aparência do Blahg?

Baseado na descrição do Blahg, você provavelmente inferiu diversas coisas sobre como o aplicativo será projetado. O Blahg precisa de quatro elementos:

  1. Uma página que contém um formulário — Esse formulário precisará conter pelo menos uma área de texto. Essa página será a página de escrita.
  2. Uma página que lê uma postagem — Essa página precisará receber algum tipo de Identificador de postagem. Essa página será a página de leitura.
  3. Uma página que lista as postagens disponíveis — Essa página será a página de índice.
  4. Uma tabela de banco de dados para conter as postagens — Essa tabela precisará pelo menos conter o texto de postagem e o identificador de postagem e, provavelmente, um título de Postagem e a data da última modificação da postagem.

Obviamente, o Blahg poderia ser muito mais robusto que isso e, posteriormente na série, você realizará diversos aprimoramentos. Mas, por hora, deixe esses requisitos simples serem suficientes. Infelizmente, você não terá a chance de construir o Blahg em nenhuma das estruturas ainda. Isso ocorre na Parte 2. Mas agora é uma boa hora para configurar os bancos de dados que irá usar.


Configurando os Bancos de Dados

Antes de poder realmente construir o Blahg, é necessário configurar os bancos de dados. Não é necessário configurar um banco de dados para cada estrutura individual, mas para o propósito desta série, ajudará a manter as coisas um pouco mais organizadas enquanto evita-se a necessidade de prefixos de tabela.

Crie três bancos de dados, chamados Zend, symfony e Cake, e conceda direitos integrais a um usuário apropriado para cada banco de dados. As instruções para cada estrutura abaixo conterá o SQL necessário para criar a tabela de postagens.

Enquanto estiver manipulando os bancos de dados, pode criar também as tabelas que o Blahg usará no início. Crie uma tabela de postagens nos bancos de dados Zend e symfony usando o SQL a seguir.


Lista 1. Criando uma Tabela de Postagens em Zend e symfony
                 
CREATE TABLE 'posts' ( 
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
'title' VARCHAR( 255 ) NOT NULL , 
'text' TEXT NOT NULL , 
'modified' TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
) ENGINE = MYISAM ;

Para Zend e symfony, você está deixando a manutenção da coluna modificada para o banco de dados. Para CakePHP, você usará um SQL ligeiramente diferente. Fazer isso permitirá que Cake realize alguma mágica para você (especificamente, CakePHP fará a manutenção da coluna modificada automaticamente).


Lista 2. Criando uma Tabela de Postagens em CakePHP
                
CREATE TABLE 'posts' ( 
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
'title' VARCHAR( 255 ) NOT NULL , 
'text' TEXT NOT NULL , 
'modified' DATETIME DEFAULT NULL 
) ENGINE = MYISAM ; 

Isso é o mais simples que sintaxe de tabela pode ser. Baseado na aparência dessas tabelas, você deve ter uma imagem bem clara da aparência e funcionamento de Blahg. Você pode, até mesmo, tentar construir o Blahg.


Próximas Etapas

Resista à tentação de começar a manipular as estruturas imediatamente. Em vez disso, use algum tempo e construa Blahg sem usar nenhuma estrutura. Escreva da maneira em que está acostumado a escrever seus aplicativos, seja qual for essa maneira. Apenas certifique-se de seguir os requisitos listados acima ao construir Blahg — não fique muito sofisticado ainda. Ao construir o aplicativo de teste fora do contexto de uma estrutura e modificar o aplicativo para incluir aprimoramentos construídos ao longo da série, você pode obter uma boa noção de como uma determinada estrutura se adequa às suas necessidades e como uma determinada estrutura se ajusta a seu estilo de desenvolvimento.


Resumo

Cobrimos uma boa parte aqui. Espero que suas instalações tenham sido suaves, mas se tiver tido algum problema, você deve pesquisar na documentação da instalação sobre cada respectiva estrutura (consulte Recursos). Use algum tempo para construir Blahg de acordo com as instruções acima. Será um tempo bem usado.


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre o autor

Duane O'Brien é um canivete suíço tecnológico desde quando The Oregon Trail era somente texto. Sua comida favorita é sushi. Ele nunca esteve na lua.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=382628
ArticleTitle=Estruturas de PHP, Parte 1: Introdução a Três Estruturas Populares
publish-date=10092007
author1-email=d@duaneobrien.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).