El patrón Modelo-Vista-Controlador (MVC) es un patrón de diseño utilizado en el desarrollo de software para separar la lógica de negocio de la interfaz de usuario. MVC divide una aplicación en tres componentes principales: Modelo, Vista y Controlador.

Modelo (Model)

El Modelo es responsable de manejar la lógica de la aplicación y la comunicación con la base de datos. A continuación se muestra un ejemplo de un modelo en PHP:

<?php
class UserModel {
  private $db;

  public function __construct($db) {
    $this->db = $db;
  }

  public function getUser($id) {
    $statement = $this->db->prepare('SELECT * FROM users WHERE id = :id');
    $statement->bindParam(':id', $id, PDO::PARAM_INT);
    $statement->execute();
    return $statement->fetch(PDO::FETCH_ASSOC);
  }
}
?>

Vista (View)

La Vista se encarga de la presentación de los datos. Recibe la información del Modelo a través del Controlador y la muestra al usuario. Aquí hay un ejemplo de una vista simple en PHP:

<?php
function showUser($user) {
  echo '<h1>' . $user['name'] . '</h1>';
  echo '<p>Email: ' . $user['email'] . '</p>';
}
?>

Controlador (Controller)

El Controlador actúa como intermediario entre el Modelo y la Vista, manejando la lógica de la aplicación y las interacciones del usuario. A continuación se muestra un ejemplo de un controlador en PHP:

<?php
class UserController {
  private $model;
  private $view;

  public function __construct($model, $view) {
    $this->model = $model;
    $this->view = $view;
  }

  public function show($id) {
    $user = $this->model->getUser($id);
    $this->view->showUser($user);
  }
}
?>

Ejemplo práctico

A continuación se muestra cómo se junta todo en un ejemplo práctico:

<?php
// db connection
$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');

// instantiate model, view and controller
$model = new UserModel($db);
$view = new class {
  public function showUser($user) {
    echo '<h1>' . $user['name'] . '</h1>';
    echo '<p>Email: ' . $user['email'] . '</p>';
  }
};
$controller = new UserController($model, $view);

// show user with id 1
$controller->show(1);
?>

Tabla comparativa de patrones

PatrónDescripciónVentajasDesventajas
MVCModelo-Vista-ControladorSeparación de preocupaciones, facilidad de pruebasComplejidad inicial
MVVMModelo-Vista-VistaModeloMejora la separación de la lógica y la vistaNo es adecuado para aplicaciones pequeñas
MVPModelo-Vista-PresentadorFacilita la prueba unitaria de la vistaAumento de la complejidad

Tutorial sobre el Patrón MVC en PHP