Wydaje mi się że nie rozumiesz na czym to polega. A więc po kolei. Załóżmy że masz prosty projekt w jednym folderze i tam masz wszystkie pliki PHP. I chcesz wyciągnąć dane użytkownika z bazy o przykładowym id = 1.
Model.php
<?php
class Model
{
private $data = array();
public function find($id)
{
$result = DB::select('SELECT * FROM users WHERE id = :id', array(':id' => $id));
if ($result)
{
$model = new Model;
$model->id = $result->id;
$model->username = $result->username;
$model->email = $result->email;
return $model;
}
return NULL;
}
public function __get($key)
{
return isset($this->data[$key]) ? $this->data[$key] : NULL;
}
public function __set($key, $value)
{
$this->data[$key] = $value;
}
}
View.php (ta klasa będzie użyta do renderowania wszystkich templatek i będzie tylko jedna)
<?php
class View
{
public function render($path, array $vars = array())
{
ob_start();
extract($vars);
require($path);
return ob_get_clean();
}
}
template.php (to będzie odpowiedzialne za wyświetlanie danych, tutaj także będą formularze)
<!DOCTYPE html>
<html>
<head>
<title>User</title>
</head>
<body>
<p>Id: <?= $user->id ?></p>
<p>Username: <?= $user->username ?></p>
<p>E-mail: <?= $user->email ?></p>
</body>
</html>
Controller.php (steruje przepływem informacji):
<?php
class Controller
{
private $model;
private $view;
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function indexAction()
{
// pobieranie danych z modelu
$id = 1;
$user = $this->model->find($id);
// i przekazywanie ich do widoku
return $this->view->render('template.php', array('user' => $user));
}
}
DB.php (klasa helper, odpowiada za połączenia z bazą danych):
<?php
class DB
{
public static $driver = 'mysql';
public static $hostname = 'localhost';
public static $database = 'mojabaza';
public static $username = 'root';
public static $password = 'root';
public static function select($sql, array $params)
{
$dsn = DB::$driver . ':host=' . DB::$hostname
. ';dbname=' . DB::$database;
$db = new PDO($dsn, DB::$username, DB::$password);
$stmt = $db->prepare($sql);
$stmt->execute($params);
return $stmt->fetch(PDO::FETCH_OBJ);
}
}
index.php:
<?php
// automatyczne ładowanie klas
spl_autoload_extensions(".php");
spl_autoload_register();
$model = new Model();
$view = new View();
$controller = new Controller($model, $view);
echo $controller->indexAction();
I nie wiem czy załapiesz o co chodzi. Jest podzielone i ściśle zdefiniowane co i za co odpowiada, w tym przypadku masz tu coś na kształt Active Record w przypadku modelu Model.php, to reprezentuje dane które masz w tabeli users w bazie. Widok jest pasywny i jest generowany z szablonu template.php za pomocą klasy View a kontroler wszystkim steruje.
Oczywiście można by to zrobić na wiele innych sposobów.