De una forma abstracta, pero fácilmente perceptible, una aplicación se divide en dos partes.
una es la parte con la que interactúa el usuario llamada interfaz y la otra es la capa de acceso a datos.

Como suele pasar con tantas otras cosas - los mismos conceptos pueden tener varios nombres. La capa de acceso a datos se denomina también - Contenido y la Interfaz es llamada Capa de Presentación.
Una manera de llevar esta separación a una arquitectura de aplicaciones es MVC - Modelo Vista Controlador.
Esta arquitectura va más allá de esa división abstracta en dos capas e implementa 3 partes:

En el esquema de arriba las líneas azules significan una interacción directa y las verdes la indirecta. Esto básicamente quiere decir que las verdes son las respuestas a las azules.
La capa de Presentación se divide en dos componentes: Controlador y la Vista. La capa de Datos tiene un componente: el Modelo.
Controlador
Algunos al hablar de Controlador se referirán a su acometido bajo los nombres de Lógica de Negocio o Lógica Empresarial.
Lo de la lógica de negocio probablemente venga de los tiempos en los que los programas sobre todo hacían cosas relacionadas con informes contables.
Como su propio nombre indica el Controlador controla lo que sucede a partir de que se haya producido una interacción por parte del usuario sobre la Vista.
La Vista le comunica los eventos al Controlador. El Controlador usa el Modelo para conseguir los datos o almacenarlos y por fin, el Controlador vuelve a usar la Vista para comunicar al usuario que resultado provocó su acción.
Modelo
El acometido de esta parte llamada Modelo es el Acceso A Datos. Al hablar de Datos uno piensa en una Base de Datos o un Sistema de Gestión de Bases de Datos (SGBD): MySQL, PostgreSQL, Oracle etc.
En realidad el Modelo encapsula la Capa de Acceso a Datos de tal forma que se supone que nos podemos olvidar de que tipo de SGBD estamos usando.
El Modelo, en realidad, es el objeto en sí.
Si no te suena el término “objeto” mira Programación Orientada a Objetos (POO).
Vista
La tercera parte es la Vista. Es en realidad la Capa de Presentación. Sirve para que el usuario pueda interactuar a través de los eventos con el Controlador y también para que pueda ver los resultados. Estos resultados serán aportados por el Controlador a través del Modelo. Sí - Modelo también.
Esta es la diferencia con la simple programación por capas (también llamada escalonada o multi-escalonada) y sin conocerla se suelen confundir los términos. Mira el gráfico:

En una arquitectura de separación por capas – que es una manera de llevar a cabo la separación abstracta de 2 capas– la Capa de Acceso a Datos nunca interfiere directamente con la Vista. Lo hace siempre a través del Controlador. El Controlador interpreta los eventos que le llegan de la Vista, usa los objetos o funciones de la Capa de Acceso A Datos y envía datos a la Vista. Pero la Vista no ejecuta los métodos de los objetos. En MVC, sin embargo, la Vista sí puede mostrar datos a través de los métodos de un objeto que el Controlador le ha pasado.

Traducido al mundo de la programación web paso por paso:
1) el Controlador recibe una petición. Esto puede ocurrir de forma directa poniendo el usuario en el navegador la url del Controlador http://sitioweb.algo/controlador.php, o mediante un evento a través de una Vista ya renderizada (envio de un formulario por ejemplo), o por una petición ajax.
2) el Controlador analiza la petición y usa un Modelo para obtener datos de algún tipo.
3) el Modelo puede leer datos y/o los escribirlos en una base de datos. Normalmente sucede esto, aunque no siempre.
4) el Controlador usa una Vista para poder presentar los resultados al usuario.
5) la Vista usa el Modelo, de tal forma, que algún tipo de respuesta obtenido por la acción previa será presentado en la Vista.
6 ) la Vista está renderizada con los datos del Modelo y el Controlador envía esta respuesta al usuario.
7) El usuario obtiene la respuesta
El Modelo Vista Controlador no es una cosa reciente. Lo inventaron en los años 70 al empezar a hacer aplicaciones medianamente grandes que manejaban muchos datos. Es el llamado “Modelo* 2” en la jerga Sun.
*Aquí la palabra Modelo no tiene que ver con el Modelo de Modelo Vista Controlador sino con el nombre de la arquitectura.
Hablando de la interacción entre el Modelo y la Vista - en Java también es posible implementar un componente llamado Observador que después de constatar algún cambio en el Modelo, puede realizar ciertas operaciones. Por ejemplo: el usuario confirma la compra en una tienda on-line y el Observer implementado ve que hay un cambio en el Modelo (en la propia base de datos) y manda un email de confirmación o actualiza la Vista.
Pero los Observadores no se implementan en PHP porque este lenguaje se ejecuta de manera distinta a como se ejecutan los procesos de Java. Normalmente al tener un tiempo limitado de ejecución los procesos PHP no hacen de observadores.
Sinceramente - hacer una aplicación usando la arquitectura MVC te costará más trabajo que si haces páginas monolíticas, mezclándolo todo - el php y el html en lo que se llama popularmente el código spaghetti.
El MVC supone más trabajo:
Primero tendrás que definir los Modelos y convertirlos en Objetos de tal manera que sus atributos y métodos sean el conjunto de propiedades y acciones verdaderamente necesarias y representativas. Tendrás que planificar las Vistas por separado y trabajar los Controladores. Al principio de la implementación te será más rápido hacer páginas monolíticas…
¿Por qué usarlo entonces?
Pues, cuando quieras cambiar tu aplicación – para añadir, quitar o cambiar alguna funcionalidad - la vida te resultará muy dura. Un proyecto medianamente grande se convertirá en un infierno en muy poco tiempo sobre todo cuando quieras cambiar algo y ello afecte al funcionamiento de más de una de tus páginas.
El MVC básicamente te permitirá poder cambiar las Capas de presentación sin que afecten a la de acceso de datos y viceversa.
Hay gente que te dirá que el PHP fue concebido como algo sencillo y práctico. Como un lenguaje que permite hacer páginas web dinámicas y procesar formularios de una manera simple. Que complicar las cosas más allá de eso es impropio de este lenguaje.
Y les doy la razón. ¡Claro! El asunto es que ese primer PHP no tenía mucho que ver con el PHP5 actual. No había objetos por ejemplo.
Hay pequeñas diferencias en como implementan el MVC distintos frameworks, pero los fundamentos son los mismos.
También puedes usar motores de plantillas como por ejemplo Smarty para implementar el MVC, pero en realidad no necesitas nada más que el PHP puro.
Aquí puedes ver un ejemplo:
MODELO: _modelo.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| class ClaseX
{
protected $plantilla_propia = "_listar.php";
protected $arrayx= array();
public function show()
{
include ($this->plantilla_propia);
}//fun
public function CargarDatos()
{
$this->arrayx = array("Abel", "Marco","Pedro");
}//fun
}//class
?> |
una plantilla usada por el modelo: _listar.php
1
2
3
4
5
6
7
8
9
| foreach ($this->arrayx as $elemento)
{
echo $elemento["nombre"];
echo "";
}//foreach
?> |
CONTROLADOR: _controlador.php
1
2
3
4
5
6
7
8
9
10
11
12
13
| include ("./_modelo.php");
$objX = new ClaseX();
//aquí habría que implementar una clase que
//determine las caracteristicas de la pagina
//pero para poner un ejemplo sencillo vamos
//a saltarnos esa parte en este artículo
$titulo = "pagina nueva";
$objX->CargarDatos();
include ("_vista.php"); |
VISTA: _vista.php
El punto clave en una Vista como la de este ejemplo es que no uses instrucciones PHP más allá de las que muestren datos. ¿Por qué? Pues si la lógica de tu aplicación se está decidiendo en la Vista entonces ¿para qué queremos el Controlador?
Simplificando mucho el concepto eso quiere decir que uses echo y metodos de tus objetos (Modelo) que hagan echo de alguna forma aunque tu los llames show o muestra_datos o lo que tú quieras.
El inventor y gurú del PHP Rasmus Lerdorf, publicó hace algún tiempo, en febrero del año 2006 un bastante mal entendido artículo, titulado “The no framework PHP MVC framework”…
Aquí, Rasmus nos habla sobre como implementar un sencillo MVC usando solo PHP puro. Bueno, estoy de acuerdo hasta un cierto punto con este artículo y es que implementar el MVC sin usar un framework que vaya más allá de nuestras necesidades nos va a beneficiar en cuanto a la memoria que usa cada script PHP. Más tarde hablaremos sobre la optimización. Algunos han interpretado que Rasmus en este artículo defendía la programación procedural en contra de la Orientada a Objetos. El mismo dice que no es así- que podía haber hecho todo el ejemplo usando más objetos y estoy de acuerdo.
Pero si observas detenidamente la parte titulada “View –add.html” que es el ejemplo de Vista que nos pone su autor, te darás cuenta que la Vista hace al principio una inclusión del Controlador:
1
2
3
4
5
| include './ui.inc'; // Common View Helper functions
include './add_c.inc'; // Controller
head(); |
Vale, pues – eso no es MVC aunque lo diga mi admirado Rasmus. Es un framework con división de capas en tres partes pero no es MVC. La Vista no debe ser la que controla la aparición de un Controlador sino todo lo contrario: el Controlador usa las Vistas.