Publicidade   
 você está aqui: phpbrasil.com    artigos    artigo  
 
:: novos artigos ::

:: recomendado ::

PHP: Guia do Desenvolvedor

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

gladiador
Pontos: 3567

Visite a página de perfil de Daniel RibeiroProgramando em MVC com PHP
por Daniel Ribeiro
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

Muita gente me pergunta sobre a maneira que eu programo usando MVC com PHP. É claro que já existem vários frameworks que utilizam essa técnica no desenvolvimento PHP. Porém eu resolvi apresentar aqui o conceitual do que eu uso que pode ser de material de auxílio para outros programadores também.
Vote aqui!
Média de Votos Atual: 9.17
Total de Votos: 24
Nota:   

Para se ter uma ideia, vamos partir para o modelo de programação orientada a objetos. Programar em MVC nada mais é do que programar também usando orientação a objetos.

Vamos pensar então no conceito de objeto. Um exemplo, um veículo, onde teremos a classe de veículo e seus metodos:


<?php
class Veiculo
{
    
/**
     * Qualquer veículo tem os seus métodos padrões:
     */
    
public function andar()
    {
        
// ... código aqui
    
}

    
public function parar()
    {
        
// ... código aqui
    
}
}
?>


Agora digamos que temos vários veículos, temos carro, moto, bicicleta e cada um terá eventos diferentes um do outro. Para isso criamos novas classes extendendo a classe Veiculo no qual as novas classes irão herdar os métodos e propriedades da classe Veiculo:


<?php
class Bicicleta extends Veiculo
{
    
// A bicicleta por sua vez contem propriedades
    
public $rodas;

    
// E tbm tem um metodo construtor
    
public function __construct()
    {
        
$this->rodas 2;
    }

    
// E tbm seus metodos
    
public function trocarMarcha()
    {
        
// ... código aqui
    
}
}
?>


Desta forma quando instanciarmos o objeto Bicicleta, podemos utilizar os metodos de Veiculo, pois bicicleta é uma extensao de veiculo ex:


<?php
$meuVeiculo 
= new Bicicleta();
$meuVeiculo->trocarMarcha();
$meuVeiculo->andar();
$meuVeiculo->parar();
?>


Agora vamos construir outra classe (Automovel) que instancia veiculo


<?php
class Automovel extends Veiculo
{
    
public function ligar()
    {
        
// ... código aqui
    
}

    
public function desligar()
    {
        
// ... código aqui
    
}
}
?>


Desta forma quando instanciarmos o objeto Automovel, podemos utilizar os métodos de Veiculo, pois automovel é uma extensao de veiculo ex:


<?php
$meuVeiculo 
= new Automovel();
$meuVeiculo->ligar();
$meuVeiculo->andar();
$meuVeiculo->parar();
$meuVeiculo->desligar();
?>


Percebeu que desta forma, se eu quiser mudar o comportamento de um Veiculo (independente do que ele seja) basta modificar a classe Veiculo, que todos os tipos de veiculos serão alterados (pois eles extendem a classe Veiculo). Isso facilita muito na manutenção do código.

Pois bem, onde queremos chegar com tudo isso? Veja na próxima página como implementamos isso num sistema MVC.




<< Anterior 1 2 3 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

Um verdadeiro artigo sobre MVC
publicado por Marcio Muzi - 2007-08-20 05:39:05

Parabéns Daniel! Você foi pioneiro na comunidade do PHP a escrever um artigo exemplificando o que é de verdade a arquitetura MVC. Já vi alguns tentando isso, mas sem sucesso e por esse motivo cheguei a começar a escrever um artigo sobre MVC.

Programo utilizando essa arquitetura há 1 ano e meio. Sua forma de separar o código e nomenclatura, é muito semelhante a que uso, apenas utilizo mais uma camada, a Dao (ex. class UsuarioDao extends Dao), onde são montados as chamadas SQL ao banco de dados (Uma das aplicações que fiz conecta ao Oracle e ao PostgreSQL).

Concordo plenamente com o que você disse: "conceitual... que pode ser de material de auxílio para outros programadores também"

[]s

aaa
publicado por ZECAH - 2007-08-20 13:10:28

Eita plagio da porra eu divulguei esta parada a uns 3 anos atraz ate a estrutura e nomeclatura iguais

Ae marcio é Plagio do que a gente fez a um bom tempo atraz, lembra que eu ja usava esta parada antes da gente se conhecer... eu mandei uma documentação pra uma galera com esta estrutura. Ele deve ter achado em algum canto
Mesmo assim, massa divulgar a simplicidade...

Poderia ter citado a fonte
publicado por Marcio Muzi - 2007-08-21 04:19:44

Ae Zeca, lembro sim, foi você quem trouxe a tecnologia, até então nunca tinha visto na comunidade algo parecido.
Daniel, você continua de parabéns pela iniciativa, apenas reafirmo o conselho do meu amigo Zeca, de você citar a fonte quando algo não foi 100% idéia sua. Veja um artigo que escrevi no iMasters onde cito as fontes:
http://www.imasters.com.br/artigo/5214/

[]s

Como assim citar a fonte?
publicado por Daniel Ribeiro - 2007-08-21 05:34:32

Pessoal, vou colocar aqui o que eu escrevi para o nosso amigo zecah. Pelo que eu sei não é plágio não. Se já existe alguma material semelhante ao que eu escrevi, pode ter sido conhecidencia, eu mesmo nunca achei nenhum artigo mencionando sobre isso, por isso de certa forma resolve descrever. Pois trabalho com essa metodologia a uns 2 anos no qual desenvolvi para um cliente.
Se realmente tiver como constatar que é mesmo plágio, me indique a fonte que eu coloco os devidos créditos.
Marcio, eu li o seu artigo e achei interessante a idéia. Apenas reafirmo que não tenho que citar a fonte de um artigo no qual eu mesmo escrevi. É íncrivel como todo mundo está falando "é plágio, cite a fonte!" se não existe (pelo menos não encontrei) nenhum artigo publicado sobre o assunto.
Antes de comecar a desenvolver dessa maneira, eu procurei bastante sobre metodos de desenvolvimento MVC em PHP e achei muita coisa, no qual fiz um merge de tudo isso e desenvolvi minha própria maneira de programar.
Se é que existe alguma referencia, ou fonte a ser citada, agradeceria ao Joe Stamp no qual me apresentou um modelo (http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html) no qual ele utilizava e acabei tomando base para criar o meu próprio. Porém a metodologia que ele usa, é ainda um pouco mais abrangente do que a minha. Mas não vi a necessidade de abstrair tanto assim como ele faz, por isso em base do que ele já utilizava, resolvi criar a minha metodologia e escrever esse artigo.
Volto a salientar, se houver algum artigo que demonstre de igual maneira o conteúdo que eu abordei aqui, não vou deixar de dar os devidos créditos.

Esclarecimentos
publicado por ZECAH - 2007-08-21 06:05:25

Daniel de qualquer forma parabens.... o lance é que eu mandei pro email pra algumas pessoas e empresas que olharam e adoraram a metodologia, porem tinha mais detlahes como router entre outros conceitos mas a implementação de uma solucao é identica...

Mas pode ter acontecido uma coincidencia muito grande.. como aconteceu comigo e o pradro.. eu envolui o sistema fazendo um gerador de codigo 8 meses depois eu vi em uma revista falando da framework prado e fui olhar, na hora eu vi o quanto era identica a estrutura que eu tinha montando ate o layout era meio identico porem o deles mais bonito...

Mas rola coincidencias...
Parabens cara

Didático
publicado por guilherme_pl - 2007-08-22 05:36:21

Parabéns mesmo, muito bom. É bem didático, para explicar o que é MVC.

Titulo
publicado por Pablo Vanni - 2007-08-22 07:44:51

Bom gostei do artigo porem acho que o nome esta meio estranho o certo poderia ser "Programando em PHP com..."

Valew pela ortigo

Achei legal..
publicado por John Marques - 2007-08-23 06:54:34

poxa achei legal..
artigo.. confesso que ainda não conhecia..
heueheu
:D

Parabéns...
publicado por Wescley Costa - a.k.a Narixx - 2007-08-26 18:50:32

Parabéns Daniel...

Muito bom o seu artigo... ficou de uma forma bem didática, muito mais fácil para compreender!!!

Show demais... A comunidade agradece!!!

Valeu ae!!!

Boa
publicado por Fernando Lopes - 2007-08-30 10:06:20

Para quem está iniciando poo realmente é muito bom.

Muito bom...
publicado por Iuri Neumann - 2007-09-20 19:00:31

bem, independente de quem tenha feito o original, parabenizo aos 2 por terem tido iniciativa... e agradeço primeiramente ao daniel, pois é o artigo dele que estou lendo aqui... bem, admito também que até então nao utilizei este modelo de programaçao, mas que estou ansioso para aplicá-lo... Mais uma vez, parabéns pelo artigo...

Parabéns
publicado por Ricardo Augusto Pereira Gama - 2007-10-04 12:59:34

Muito bom script. seja de quem for a comunidade agradece... o pessoal tem que começar a abrir a cabeça pra mudar. essa forma de prgramar é muito boa... PARABÉNS

Dúvida
publicado por Alysson Rafael - 2007-10-22 07:33:21

ola. esse script e muito interessante e eu to utilizando ele num projeto. porem to tendo problemas com a linha eval('$objLogin->' . $_REQUEST['action']);... ta dando o seguinte erro q nao consigo resolver: "Parse error: syntax error, unexpected $end in C:\wamp\www\MVC\index.php(19) : eval()'d code on line 1
"... alguem pode me ajudar? Obrigado, Alysson

Parabéns
publicado por dudumendess - 2007-12-13 20:02:06

Adorei a métologia. Abriu minha cabeça. Sou programador iniciante e não conhecia essa estrutura. não foi difícil de entender. obrigado, em nome de todos da comunidade. Estou ciente de que posso contar com os artigos de qualidade desta cominidade. vlw :)

Perfeito!!!!!!!!!
publicado por fccd - 2008-01-10 11:03:23

Muito bom essa class com extends...
Parabéns!

ATENÇÃO!
publicado por hugorod - 2008-04-28 16:02:39

mnt bom o artigo, mas como o autor informa, é apenas conceptual.

Os menos experientes devem ter atenção e entender que o código que descrito, contem falhas graves de segurança...

<?php
...

// define uma acao default
if (!$_REQUEST['action']) {
// isso implica que todos os controllers
// terao que ter um metodo chamado acaoPadrao
$_REQUEST['action'] = 'acaoPadrao';
}

// agora eu executo o metodo passado via url
eval('$instancia' . $_REQUEST['action']);
?>

seria negativo se um usuário (mal intencionado) acedesse à página usando p/ex: ?action=login;phpinfo();

nesse caso é um exemplo inofensivo, mas acho que dá para terem ideia.

a solução é desenvolver um função + robusta de filtragem de parametros, aceitar apenas as conhecidadas, e usar o valor default para tudo o resto. (php.net/switch)

Publique os seus Comentários

Nome:
Email:
Título:
Comentário:

NOTA: Cadastre-se no site para poder publicar comentários.

 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 1.367 segundos