Programando em MVC com PHP
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:
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:
Desta forma quando instanciarmos o objeto Bicicleta, podemos utilizar os metodos de Veiculo, pois bicicleta é uma extensao de veiculo ex:
Agora vamos construir outra classe (Automovel) que instancia veiculo
Desta forma quando instanciarmos o objeto Automovel, podemos utilizar os métodos de Veiculo, pois automovel é uma extensao de veiculo ex:
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.
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.
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
(~12 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
Acho muito mais fácil criar um padrão próprio e seguí-lo :D
29/07/2012 9:59pm
(~12 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)
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
(~16 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
(~17 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
"... alguem pode me ajudar? Obrigado, Alysson
22/10/2007 7:33am
(~17 anos atrás)
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
(~17 anos atrás)