MVC框架
Model
:模型类,数据库操作View
:视图类,展示到客户端Controlle
r:控制器- 依赖注入:在客户端实例化类,把对象当做参数注入调用方法
- 容器:对象容器,对象管家
Model代码:
<?php
namespace mvc_demo;
// Model 模型类: 用于数据库操作
class Model
{
public function getData()
{
return (new \PDO('mysql:host=localhost;dbname=phpedu', 'root','root'))
->query('SELECT * FROM `salary` LIMIT 15')
->fetchAll(\PDO::FETCH_ASSOC);
}
}
View代码:
<?php
namespace mvc_demo;
// 视图类
class View
{
public function fetch($data)
{
$table = '<table>';
$table .= '<caption>员工工资明细</caption>';
$table .= '<tr><th>ID</th><th>工号</th><th>姓名</th><th>入职日期</th><th>部门</th><th>岗位</th><th>工作天</th><th>应发</th></tr>';
// 将数据循环遍历出来
foreach ($data as $salary) {
$table .= '<tr>';
$table .= '<td>' . $salary['id'] .'</td>';
$table .= '<td>' . $salary['msnv'] .'</td>';
$table .= '<td>' . $salary['name'] .'</td>';
$table .= '<td>' . date('Y-m-d', $salary['hiredate']) . '</td>';
$table .= '<td>' . $salary['donvi'] . '</td>';
$table .= '<td>' . $salary['congviec'] . '</td>';
$table .= '<td>' . $salary['ngaycong'] . '</td>';
$table .= '<td>' . $salary['salary'] . '</td>';
$table .= '</tr>';
}
$table .= '</table>';
return $table;
}
}
echo '<style>
table {border-collapse: collapse; border: 1px solid;text-align: center; margin: auto;}
caption {font-size: 1.2rem; margin-bottom: 10px;}
tr:first-of-type { background-color:wheat;}
td,th {border: 1px solid; padding:5px}
</style>';
控制器一(普通注入):
<?php
namespace mvc_demo;
// 控制器2
// 1. 加载模型类
require 'Model.php';
// 2. 加载视图
require 'View.php';
// 3. 创建控制
class Controller2
{
public function index(Model $model, View $view)
{
// 1. 获取数据
$data = $model->getData();
// 2. 渲染模板/视图
return $view->fetch($data);
}
}
// 客户端:
$model = new Model;
$view = new View;
// 实例化控制器类
$controller = new Controller2;
echo $controller->index($model, $view);
控制器二(构造方法注入):
<?php
namespace mvc_demo;
// 控制器3
// 1. 加载模型类
require 'Model.php';
// 2. 加载视图
require 'View.php';
// 3. 创建控制
class Controller3
{
// 依赖对象属性: 对象参数
private $model;
private $view;
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function index()
{
// 1. 获取数据
$data = $this->model->getData();
// 2. 渲染模板/视图
return $this->view->fetch($data);
}
public function index1()
{
// 1. 获取数据
$data = $this->model->getData();
// 2. 渲染模板/视图
return $this->view->fetch($data);
}
}
// 客户端:
$model = new Model;
$view = new View;
// 实例化控制器类
$controller = new Controller3($model, $view);
echo $controller->index1();
控制器三(对象容器):
<?php
namespace mvc_demo;
// 控制器4
// 1. 加载模型类
require 'Model.php';
// 2. 加载视图
require 'View.php';
// 3. 服务容器
class Container1
{
// 对象容器
protected $instances = [];
// 绑定: 向对象容器中添加一个类实例
public function bind($alias, \Closure $process)
{
$this->instances[$alias] = $process;
}
// 取出: 从容器中取出一个类实例 (new)
public function make($alias, $params = [])
{
return call_user_func_array($this->instances[$alias], []);
}
}
$container = new Container1;
// 绑定
$container->bind('model', function () {return new Model;});
$container->bind('view', function () {return new View;});
// 4. 创建控制
class Controller4
{
public function index(Container1 $container)
{
// 1. 获取数据
$data = $container->make('model')->getData();
// 2. 渲染模板/视图
return $container->make('view')->fetch($data);
}
}
// 客户端:
// 实例化控制器类
$controller = new Controller4();
echo $controller->index($container);