<?php
//命名空間
namespace mvctest;
//定義一個(gè)視圖類:用來(lái)渲染數(shù)據(jù)
class View {
public function fetch($data) {
//使用字符串拼接的方式渲染數(shù)據(jù)
$table = '<table>';
$table .= '<caption>用戶信息表</caption>';
$table .= '<tr>
<th>ID</th>
<th>用戶名</th>
<th>性別</th>
<th>職位</th>
<th>郵箱</th>
<th>手機(jī)號(hào)碼</th>
<th>城市</th>
<th>個(gè)性簽名</th>
<th>注冊(cè)時(shí)間</th>
</tr>';
//將數(shù)據(jù)循環(huán)遍歷出來(lái)
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>';
//調(diào)試代碼
//require 'Model.php';
//echo (new View)->fetch((new Model)->getData());
<?php
//命名空間
namespace mvctest;
//定義一個(gè)模型類:用來(lái)獲取數(shù)據(jù)
class Model {
public function getData() {
return (new \PDO('mysql:host=localhost;dbname=genbackmanasys', 'root', 'root'))->query('SELECT * FROM `user_info`')->fetchAll(\PDO::FETCH_ASSOC);
}
}
//調(diào)試代碼
//print_r((new Model)->getData());
<?php
//命名空間
namespace mvctest;
// 1. 加載模型類
require 'Model.php';
// 2. 加載視圖類
require 'View.php';
// 3. 創(chuàng)建控制器類:將用戶請(qǐng)求和數(shù)據(jù)進(jìn)行關(guān)聯(lián)/綁定
class Controller {
public function bind(Model $model, View $view) {
// 1. 獲取數(shù)據(jù)
$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;
//定義一個(gè)視圖類:用來(lái)渲染數(shù)據(jù)
class View {
public function fetch($data) {
//使用字符串拼接的方式渲染數(shù)據(jù)
$table = '<table>';
$table .= '<caption>用戶信息表</caption>';
$table .= '<tr>
<th>ID</th>
<th>用戶名</th>
<th>性別</th>
<th>職位</th>
<th>郵箱</th>
<th>手機(jī)號(hào)碼</th>
<th>城市</th>
<th>個(gè)性簽名</th>
<th>注冊(cè)時(shí)間</th>
</tr>';
//將數(shù)據(jù)循環(huán)遍歷出來(lái)
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>';
//調(diào)試代碼
//require 'Model.php';
//echo (new View)->fetch((new Model)->getData());
<?php
//命名空間
namespace mvctest;
//定義一個(gè)模型類:用來(lái)獲取數(shù)據(jù)
class Model {
public function getData() {
return (new \PDO('mysql:host=localhost;dbname=genbackmanasys', 'root', 'root'))->query('SELECT * FROM `user_info`')->fetchAll(\PDO::FETCH_ASSOC);
}
}
//調(diào)試代碼
//print_r((new Model)->getData());
<?php
//命名空間
namespace mvctest;
// 1. 加載模型類
require 'Model.php';
// 2. 加載視圖類
require 'View.php';
// 3. 創(chuàng)建控制器類:將用戶請(qǐng)求和數(shù)據(jù)進(jìn)行關(guān)聯(lián)/綁定
class Controller {
//保存初始化后的數(shù)據(jù)
private $model;
private $view;
//初始化操作
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function bind() {
// 1. 獲取數(shù)據(jù)
$data = $this->model->getData();
// 2. 渲染模板/視圖
return $this->view->fetch($data);
}
public function bind1() {
// 1. 獲取數(shù)據(jù)
$data = $this->model->getData();
// 2. 渲染模板/視圖
return $this->view->fetch($data);
}
}
//客戶端代碼
$model = new Model;
$view = new View;
$controller = new Controller($model, $view);
echo $controller->bind1();
原理:創(chuàng)建服務(wù)容器統(tǒng)一管理類實(shí)例,再使用依賴注入的方式將服務(wù)容器傳入到控制器中,在控制器中調(diào)用服務(wù)容器的方法操作對(duì)象
View
<?php
//命名空間
namespace mvctest;
//定義一個(gè)視圖類:用來(lái)渲染數(shù)據(jù)
class View {
public function fetch($data) {
//使用字符串拼接的方式渲染數(shù)據(jù)
$table = '<table>';
$table .= '<caption>用戶信息表</caption>';
$table .= '<tr>
<th>ID</th>
<th>用戶名</th>
<th>性別</th>
<th>職位</th>
<th>郵箱</th>
<th>手機(jī)號(hào)碼</th>
<th>城市</th>
<th>個(gè)性簽名</th>
<th>注冊(cè)時(shí)間</th>
</tr>';
//將數(shù)據(jù)循環(huán)遍歷出來(lái)
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>';
//調(diào)試代碼
//require 'Model.php';
//echo (new View)->fetch((new Model)->getData());
<?php
//命名空間
namespace mvctest;
//定義一個(gè)模型類:用來(lái)獲取數(shù)據(jù)
class Model {
public function getData() {
return (new \PDO('mysql:host=localhost;dbname=genbackmanasys', 'root', 'root'))->query('SELECT * FROM `user_info`')->fetchAll(\PDO::FETCH_ASSOC);
}
}
//調(diào)試代碼
//print_r((new Model)->getData());
<?php
//命名空間
namespace mvctest;
// 1. 加載模型類
require 'Model.php';
// 2. 加載視圖類
require 'View.php';
// 3. 創(chuàng)建服務(wù)容器類:統(tǒng)一管理類實(shí)例
class Container {
// 1. 創(chuàng)建對(duì)象容器
protected $box = [];
// 2. 創(chuàng)建綁定方法:向?qū)ο笕萜髦刑砑右粋€(gè)類實(shí)例
public function bind($var, \Closure $process) {
//對(duì)象容器中的鍵是對(duì)象名,值是其實(shí)例化過(guò)程
$this->box[$var] = $process;
}
// 3. 創(chuàng)建取出方法:從容器中取出一個(gè)類實(shí)例(new的過(guò)程)
public function make($var, $params = []) {
//用回調(diào)方式返回一個(gè)對(duì)象
return call_user_func_array($this->box[$var], []);
}
}
// 3. 創(chuàng)建控制器類:將用戶請(qǐng)求和數(shù)據(jù)進(jìn)行關(guān)聯(lián)/綁定
class Controller {
public function bind(Container $container) {
// 1. 獲取數(shù)據(jù)
$data = $container->make('model')->getData();
// 2. 渲染模板/視圖
return $container->make('view')->fetch($data);
}
}
//客戶端代碼
// 1. 創(chuàng)建服務(wù)容器
$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);
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)