实现mvc中的控制器对外部对象的二种依赖注入方式
MODEL模型UserM.php
<?php
namespace mvc_demo;
class UserM
{
public function getData()
{
return(new \PDO('mysql:host=localhost;dbname=phpedu','root','root'))
->query('SELECT * FROM `user` LIMIT 12')
->fetchAll(\PDO::FETCH_ASSOC);
}
}
VIEW视图UserV.php
<?php
namespace mvc_demo;
class UserV
{
public function fatch($data)
{
$table = printf('|id|姓名|状态|创建时间|<br>');
$table .= printf('|--|--|--|--|<br>');
foreach ($data as $user) {
$date = date('Y年m月d日', $user['create_time']);
$table .= printf('|%s|%s|%s|%s|<br>', $user['id'], $user['name'], $user['status'], $date);
}
return $table;
}
}
CONTRALLER控制器
高度耦合
<?php
namespace mvc_demo;
require 'UserM.php';
require 'UserV.php';
class Contraller1
{
public function index()
{
//获取数据
$model = new UserM;
$data = $model->getData();
//渲染模板
$view = new UserV;
return $view->fatch($data);
}
}
//实例化控制器类
$contraller = new Contraller1();
echo $contraller->index();
依赖注入方式一
<?php
namespace mvc_demo;
require 'UserM.php';
require 'UserV.php';
class Contraller2
{
public function index(UserM $model,UserV $view)
{
//获取数据
$data = $model->getData();
//渲染模板
return $view->fatch($data);
}
}
$model = new UserM;
$view = new UserV;
//实例化控制器类
$contraller = new Contraller2();
echo $contraller->index($model, $view);
依赖注入方式二
<?php
namespace mvc_demo;
// 控制器依赖注入点改到构造方法, 实现对外部依赖对象的共享
require 'UserM.php';
require 'UserV.php';
class Contraller3
{
private $model;
private $view;
public function __construct(UserM $model,UserV $view)
{
$this->model = $model;
$this->view = $view;
}
public function index()
{
//获取数据
$data = $this->model->getData();
//渲染模板
return $this->view->fatch($data);
}
}
$model = new UserM;
$view = new UserV;
//实例化控制器类
$contraller = new Contraller3($model, $view);
echo $contraller->index();
页面显示(三种相同)
id |
姓名 |
状态 |
创建时间 |
1 |
admin |
1 |
2020年05月09日 |
2 |
张三 |
1 |
2020年05月09日 |
3 |
李四 |
1 |
2020年05月09日 |
4 |
王老师 |
1 |
2020年05月09日 |
5 |
刘六 |
1 |
2020年05月09日 |
6 |
赵大 |
0 |
2020年05月09日 |
7 |
钱二 |
0 |
2020年05月09日 |
10 |
wang |
1 |
2020年05月11日 |
11 |
admin |
1 |
2020年05月09日 |
12 |
张三 |
1 |
2020年05月09日 |
13 |
李四 |
1 |
2020年05月09日 |
14 |
王老师 |
1 |
2020年05月09日 |