视图
<?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></tr>';
// 将数据循环遍历出来
foreach ($data as $staff) {
$table .= '<tr>';
$table .= '<td>' . $staff['id'] . '</td>';
$table .= '<td>' . $staff['jine'] . '</td>';
$table .= '<td>' . $staff['zhanghu'] . '</td>';
$table .= '<td>' . $staff['chengyuan'] . '</td>';
$table .= '<td>' . $staff['beizhu'] . '</td>';
$table .= '<td>' . date('Y年m月d日', $staff['shijian']) . '</td>';
$table .= '</tr>';
}
$table .= '</table>';
return $table;
unset($GLOBALS['table']);
}
//删除数据
public function del($id)
{
$sql="DELETE FROM `jizhang` WHERE `id`=$id";
$sql_obj = $this->pdo->prepare($sql);
$sql_obj->execute();
if ($sql_obj->rowCount() > 0) :
return true;
else :
return false;
endif;
}
}
echo '<style>
table {border-collapse: collapse; border: 1px solid;text-align: center; width: 500px;height: 150px;width: 600px;}
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;
// 模型类: 用于数据库操作
class Model
{
public function getData()
{
return (new \PDO('mysql:host=localhost;dbname=php', 'root','123456'))
->query('SELECT * FROM `jizhang` LIMIT 10')
->fetchAll(\PDO::FETCH_ASSOC);
}
}
控制器
<?php
namespace mvc_demo;
// 控制器依赖注入点改到构造方法, 实现对外部依赖对象的共享
// 1. 加载模型类
require 'Model.php';
// 2. 加载视图
require 'shitu.php';
// 3. 服务容器
class Container1
{
// 对象容器
protected $instances = [];
// 绑定: 向对象容器中添加一个类实例bind($当前对象名, 对象的创建过程 匿名函数)
public function bind($alias, \Closure $process)
{
$this->instances[$alias] = $process;
}
// 取出: 从容器中取出一个类实例 (new)make(要new的对象名称, 传递给构造方法的参数 参数列表)
public function make($alias, $params = [])
{
// $this->instances等于创建过程 instances[$alias]匿名函数或者闭包
// call_user_func_array使用这个函数回调(第一个是函数 第二个为空即可)
return call_user_func_array($this->instances[$alias], []);
}
//销毁
public function destroy()
{
unset($this->obj);
}
}
$container = new Container1;
// 绑定
$container->bind('model', function () {return new Model;});
$container->bind('view', function () {return new View;});
// 3. 创建控制
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);