<?php//命名空间namespace mvctest;//定义一个视图类:用来渲染数据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><th>注册时间</th></tr>';//将数据循环遍历出来foreach ($data as $staff) {$table.='<tr>';$table.='<td>' . $staff['id'] . '</td>';$table.='<td>' . $staff['user_name'] . '</td>';$table.='<td>' . $staff['sex'] . '</td>';$table.='<td>' . $staff['position'] . '</td>';$table.='<td>' . $staff['email'] . '</td>';$table.='<td>' . $staff['cphone_n'] . '</td>';$table.='<td>' . $staff['city'] . '</td>';$table.='<td>' . $staff['signature'] . '</td>';$table.='<td>' . date('Y年m月d日', $staff['reg_time']) . '</td>';$table.='<tr>';}$table .= '</table>';return $table;}}//定义样式echo '<style>table {border-collapse: collapse;border: 1px solid;}th, td{border: 1px solid; padding: 5px;}</style>';//调试代码//require 'Model.php';//echo (new View)->fetch((new Model)->getData());
<?php//命名空间namespace mvctest;//定义一个模型类:用来获取数据class Model {public function getData() {return (new \PDO('mysql:host=localhost;dbname=genbackmanasys', 'root', 'root'))->query('SELECT * FROM `user_info`')->fetchAll(\PDO::FETCH_ASSOC);}}//调试代码//print_r((new Model)->getData());
<?php//命名空间namespace mvctest;// 1. 加载模型类require 'Model.php';// 2. 加载视图类require 'View.php';// 3. 创建控制器类:将用户请求和数据进行关联/绑定class Controller {public function bind(Model $model, View $view) {// 1. 获取数据$data = $model->getData();// 2. 渲染模板/视图return $view->fetch($data);}}//客户端代码$model = new Model;$view = new View;$controller = new Controller;echo $controller->bind($model, $view);
<?php//命名空间namespace mvctest;//定义一个视图类:用来渲染数据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><th>注册时间</th></tr>';//将数据循环遍历出来foreach ($data as $staff) {$table.='<tr>';$table.='<td>' . $staff['id'] . '</td>';$table.='<td>' . $staff['user_name'] . '</td>';$table.='<td>' . $staff['sex'] . '</td>';$table.='<td>' . $staff['position'] . '</td>';$table.='<td>' . $staff['email'] . '</td>';$table.='<td>' . $staff['cphone_n'] . '</td>';$table.='<td>' . $staff['city'] . '</td>';$table.='<td>' . $staff['signature'] . '</td>';$table.='<td>' . date('Y年m月d日', $staff['reg_time']) . '</td>';$table.='<tr>';}$table .= '</table>';return $table;}}//定义样式echo '<style>table {border-collapse: collapse;border: 1px solid;}th, td{border: 1px solid; padding: 5px;}</style>';//调试代码//require 'Model.php';//echo (new View)->fetch((new Model)->getData());
<?php//命名空间namespace mvctest;//定义一个模型类:用来获取数据class Model {public function getData() {return (new \PDO('mysql:host=localhost;dbname=genbackmanasys', 'root', 'root'))->query('SELECT * FROM `user_info`')->fetchAll(\PDO::FETCH_ASSOC);}}//调试代码//print_r((new Model)->getData());
<?php//命名空间namespace mvctest;// 1. 加载模型类require 'Model.php';// 2. 加载视图类require 'View.php';// 3. 创建控制器类:将用户请求和数据进行关联/绑定class Controller {//保存初始化后的数据private $model;private $view;//初始化操作public function __construct(Model $model, View $view){$this->model = $model;$this->view = $view;}public function bind() {// 1. 获取数据$data = $this->model->getData();// 2. 渲染模板/视图return $this->view->fetch($data);}public function bind1() {// 1. 获取数据$data = $this->model->getData();// 2. 渲染模板/视图return $this->view->fetch($data);}}//客户端代码$model = new Model;$view = new View;$controller = new Controller($model, $view);echo $controller->bind1();

原理:创建服务容器统一管理类实例,再使用依赖注入的方式将服务容器传入到控制器中,在控制器中调用服务容器的方法操作对象
View
<?php//命名空间namespace mvctest;//定义一个视图类:用来渲染数据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><th>注册时间</th></tr>';//将数据循环遍历出来foreach ($data as $staff) {$table.='<tr>';$table.='<td>' . $staff['id'] . '</td>';$table.='<td>' . $staff['user_name'] . '</td>';$table.='<td>' . $staff['sex'] . '</td>';$table.='<td>' . $staff['position'] . '</td>';$table.='<td>' . $staff['email'] . '</td>';$table.='<td>' . $staff['cphone_n'] . '</td>';$table.='<td>' . $staff['city'] . '</td>';$table.='<td>' . $staff['signature'] . '</td>';$table.='<td>' . date('Y年m月d日', $staff['reg_time']) . '</td>';$table.='<tr>';}$table .= '</table>';return $table;}}//定义样式echo '<style>table {border-collapse: collapse;border: 1px solid;}th, td{border: 1px solid; padding: 5px;}</style>';//调试代码//require 'Model.php';//echo (new View)->fetch((new Model)->getData());
<?php//命名空间namespace mvctest;//定义一个模型类:用来获取数据class Model {public function getData() {return (new \PDO('mysql:host=localhost;dbname=genbackmanasys', 'root', 'root'))->query('SELECT * FROM `user_info`')->fetchAll(\PDO::FETCH_ASSOC);}}//调试代码//print_r((new Model)->getData());
<?php//命名空间namespace mvctest;// 1. 加载模型类require 'Model.php';// 2. 加载视图类require 'View.php';// 3. 创建服务容器类:统一管理类实例class Container {// 1. 创建对象容器protected $box = [];// 2. 创建绑定方法:向对象容器中添加一个类实例public function bind($var, \Closure $process) {//对象容器中的键是对象名,值是其实例化过程$this->box[$var] = $process;}// 3. 创建取出方法:从容器中取出一个类实例(new的过程)public function make($var, $params = []) {//用回调方式返回一个对象return call_user_func_array($this->box[$var], []);}}// 3. 创建控制器类:将用户请求和数据进行关联/绑定class Controller {public function bind(Container $container) {// 1. 获取数据$data = $container->make('model')->getData();// 2. 渲染模板/视图return $container->make('view')->fetch($data);}}//客户端代码// 1. 创建服务容器$container = new Container;// 2. 绑定$container->bind('model', function() {return new Model;});$container->bind('view', function() {return new View;});// 3. 使用依赖注入的方式将容器传入到控制器中$controller = new Controller();echo $controller->bind($container);

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号