MVC (Model-View-Controller) — это архитектурный паттерн, разделяющий приложение на три основных компонента:
class UserModel {
private $db;
public function __construct(Database $db) {
$this->db = $db;
}
public function getUsers() {
return $this->db->query('SELECT * FROM users');
}
public function createUser($data) {
// Валидация и бизнес-логика
return $this->db->insert('users', $data);
}
}
Характеристики:
<!-- views/users/list.php -->
<html>
<body>
<?php foreach ($users as $user): ?>
<div><?= htmlspecialchars($user['name']) ?></div>
<?php endforeach; ?>
</body>
</html>
Характеристики:
class UserController {
public function list(UserModel $model) {
$users = $model->getUsers();
require 'views/users/list.php';
}
public function create(Request $request, UserModel $model) {
if ($request->isPost()) {
$model->createUser($request->getPost());
redirect('/users');
}
require 'views/users/create.php';
}
}
Характеристики:
project/
├── app/
│ ├── controllers/
│ ├── models/
│ ├── views/
│ └── core/ # Ядро приложения
├── public/
│ └── index.php # Единая точка входа
└── vendor/
require '../vendor/autoload.php';
require '../app/core/Router.php';
$router = new Router();
$router->add('GET', '/users', 'UserController@list');
$router->add('POST', '/users/create', 'UserController@create');
$router->dispatch($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
class UserController {
private $model;
public function __construct(UserModel $model) {
$this->model = $model;
}
public function list() {
$users = $this->model->getUsers();
// ...
}
}
Популярные PHP-фреймворки, использующие MVC:
Преимущества:
Недостатки:
Тонкие контроллеры:
"Глупые" представления:
"Умные" модели:
Современные дополнения:
MVC в PHP — это мощный паттерн для организации кода, который особенно полезен в средних и крупных проектах. Современные фреймворки предлагают удобные реализации MVC, но понимание его основных принципов важно даже при их использовании.