php mvc逻辑处理,MVC实现一个简单的业务逻辑

MVCM :MODEL ,模型,数据库操作

V :VIEW 视图,页面,html

C :Controller,控制器

MVC运行流程

View->Controller->Model 前端视图->处理操作->后端操作

Model->Controller->View 后端操作->处理操作->前段视图

示例:

Model.php 后端操作

namespaceMVC_test;

usePDO;

classModel

{

publicfunctionmyDate()

{

return($pdo=newPDO('mysql:host=localhost;dbname=mysqli','root','142536'))

->query('select * from user limit 10')->fetchAll(PDO::FETCH_ASSOC);

}

}

示例图:

dd8971c2d2500c6470d431078fa37449.png

Model.php 功能主要是一个连接数据库类

View.php 前端视图

namespaceMVC_test;

classView

{

publicfunctionmysHow($data)

{

$table='

$table.='

';

$table.='

用户信息表';

$table.='

用户名性别年龄邮箱手机';

foreach($dataas$user)

{

$table.='

';

$table.='

'.$user['username'].'';

$table.='

'.$user['sex'].'';

$table.='

'.$user['age'].'';

$table.='

'.$user['email'].'';

$table.='

'.$user['mobile'].'';

}

$table.='

';

return$table;

}

}

echo'

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:yellow;}

td,th {border: 1px solid; padding:5px}

';

示例图:

59f75c14c109e80a80fc4dc0496e3c73.png

View.php 在前端展示的类

Controller.php 操作控制器

示例:

namespaceMVC_test;

require'Model.php';

require'View.php';

classController

{

publicfunctionIndex()

{

$data=(newModel)->myDate();

//引入Model.php的myDate方法(链接数据库)

return(newView)->mysHow($data);

//返回引入View.php的mysHow方法(展示html)

}

}Controller.php 引入Model.php和View.php 写入Index()方法。

此方法适用于简单的少量类调用。

Controller_1.php 操作控制器

示例

namespaceMVC_test;

require'Model.php';

require'View.php';

classController_1

{

private$data=NULL;

private$show=NULL;

publicfunction__construct($data,$show)

{

$this->data=$data;

$this->show=$show;

}

publicfunctionIndex()

{

$this->data=(newModel)->myDate();

return$this->show=(newView)->mysHow($this->data);

}

}Controller_1.php 引入Model.php和View.php 写入Index()方法。

使用构造函数,将引用的类加载,此方法适用于简单的少量类调用,相对第一张增加了技术含量。

Controller_2.php 操作控制器

示例:

namespaceMVC_test;

useClosure;

//加载模型类

require'Model.php';

//加载视图类

require'View.php';

//服务容器

classContainer

{

// 1. 服务容器

protected$instances=[];

//定义一个空数组来存储对象

publicfunctionbInd($alias,Closure$process)

// 2. 向对象容器中添加对象

// 参数1: 是外部对象在当前对象容器数组中的键名/别名

// 参数2: 是当前需要绑定到容器的对象的实例化过程(函数)

{

$this->instances[$alias]=$process;

//将实例化过程写入服务容器

}

publicfunctionmake($alias,$params=[])

// 3. 从对象容器中取出对象, 调用它

// 参数1:传入服务容器中的别名

// 参数2:一个空的数组

{

returncall_user_func_array($this->instances[$alias],[]);

// 从instances中取出对象名

// call_user_func_array :调用回调函数,并把一个数组参数作为回调函数的参数。

}

}

// 将外部对象: Model, View的实例绑定到服务容器中

$container=newContainer;

// 绑定模型类实例绑定到服务容器中

$container->bInd('model',function(){

returnnewModel();

});

$container->bInd('view',function(){

returnnewView();

});

classController_2

{

publicfunctionIndex(Container$container)

{

$data=$container->make('model')->myDate();

return$container->make('view')->mysHow($data);

}

}Controller_2.php 引入Model.php和View.php 写入Index()方法。

使用服务容器,将Model()和View.php,写入数组中,然后在调用。

服务容器:定义一个空数组来存储对象,使用bind方法将实例化的类存储到数组中bind需要两个参数,1.数组存储的位置。2.闭包实例化过程存储到数组。

需要用到 call_user_func_array :调用回调函数,并把一个数组参数作为回调函数的参数。重点:将没收示例绑定到服务容器中。bind(‘实例名’,function(){ return new Model())})函数返回Model.php的实例化对象。

此种写法可以在更多的类实例化调用中更加的快捷方便,只需在bind绑定中添加需要实例化的类,在进行调用。

Controller_3.php 操作控制器

示例:

namespaceMVC_test;

useClosure;

//加载模型类

require'Model.php';

//加载视图类

require'View.php';

//服务容器

classContainer_1

{

// 1. 服务容器

protected$instances=[];

//定义一个空数组来存储对象

publicfunctionbInd($alias,Closure$process)

// 2. 向对象容器中添加对象

// 参数1: 是外部对象在当前对象容器数组中的键名/别名

// 参数2: 是当前需要绑定到容器的对象的实例化过程(函数)

{

$this->instances[$alias]=$process;

//将实例化过程写入服务容器

}

publicfunctionmake($alias,$params=[])

// 3. 从对象容器中取出对象, 调用它

// 参数1:传入服务容器中的别名

// 参数2:一个空的数组

{

returncall_user_func_array($this->instances[$alias],[]);

// 从instances中取出对象名

// call_user_func_array :调用回调函数,并把一个数组参数作为回调函数的参数。

}

}

// 将外部对象: Model, View的实例绑定到服务容器中

$container=newContainer_1;

// 绑定模型类实例绑定到服务容器中

$container->bInd('model',function(){

returnnewModel();

});

$container->bInd('view',function(){

returnnewView();

});

// --------------------------------------------------------

classFacade

{

//服务容器

protectedstatic$container=NULL;

// 初始化方法:就是给当前的Facade类扣$container属性赋值

//整理为Facade的构造方法

//将外部的服务容器注入到当前的facade中

publicstaticfunctioninitialize(Container_1$container)

{

static::$container=$container;

}

}

classUserModelextendsFacade

{

publicstaticfunctionmyDate()

{

returnstatic::$container->make('model')->myDate();

}

}

classUserViewextendsFacade

{

publicstaticfunctionmysHow($data)

{

returnstatic::$container->make('view')->mysHow($data);

}

}

// --------------------------------------------------------

classController_3

{

//构造方法,初始化facade

publicfunction__construct(Container_1$container)

{

Facade::initialize($container);

}

publicfunctionIndex()

{

//1.获取数据

$data=UserModel::myDate();

//2.渲染模板

returnUserView::mysHow($data);

}

}Controller_3.php 引入Model.php和View.php 写入Index()方法。

继承Controller_2中添加类Facade,通过子类及方法将类的实例化通过静态方法调用。

Index.php 前段调用显示

示例:

namespaceMVC_test;

// --------------------------

// require 'Controller.php';

// $index = new Controller;

// echo $index->Index();

// ------------>Controller控制器的引用

// require 'Controller_1.php';

// $index = new Controller_1($data,$show);

// echo $index->Index();

// ------------>Controller_1控制器的引用

// --------服务容器----------

// require 'Controller_2.php';

// $index = new Controller_2();

// echo $index->Index($container);

// ------------>Controller_2控制器的引用

//-----------Facade-----------

require'Controller_3.php';

$index=newController_3($container);

echo $index->Index();Index.php 用户访问显示。调用了控制器方法。实现了MVC的业务逻辑。

总结:在对MVC的学习中,掌握了服务容器及facade对类实例化对象的使用。不需要再对每个类实例化繁琐调用。也大体的掌握了面对对象编程的业务逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值