+6

Programando em MVC com PHP

criado por Daniel Ribeiro em 16/08/2007 11:23am
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.

Comentários:

Mostrando 1 - 10 de 21 comentários
Achei muito bom o artigo, penço que se utilizarmos o PHP direto direcionado a um método de desenvolvimento no estilo MVC é mais confiável do que usar um framework diretamente pois você passa a ser dependente dele... com seus benefícios e problemas... Agraço a todos.
08/10/2012 8:43pm (~4 anos atrás)

Hm... Não gosto de seguir padrões pré-definidos.
Acho muito mais fácil criar um padrão próprio e seguí-lo :D
29/07/2012 9:59pm (~4 anos atrás)

Willian Silva disse:
Ainda não entendi para que serve o Smarty!
01/06/2009 11:21am (~7 anos atrás)

Dam disse:
Bom artigo.
20/11/2008 4:24am (~8 anos atrás)

Dam disse:
Bom artigo.
20/11/2008 4:24am (~8 anos atrás)

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)
28/04/2008 4:02pm (~8 anos atrás)

fccd disse:
Muito bom essa class com extends...
Parabéns!
10/01/2008 11:03am (~9 anos atrás)

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 :)
13/12/2007 8:02pm (~9 anos atrás)

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
22/10/2007 7:33am (~9 anos atrás)

Ricardo Gama disse:
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
04/10/2007 12:59pm (~9 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)