本文章为连载文章PHP面向对象的第二篇
建议先阅读前篇文章:PHP面向对象编程(二)
mvc思想原理
mvc思想简单演示
需求:
在一个网页上,根据用户的请求(选择),来显示不同的时间效果:
效果1:只显示年月日
效果2:只显示时分秒
效果3(默认效果)显示年月日时分秒;
他们之间的关系大致如下:
MVC框架思想原理图
控制器:
Controller,是一个php文件,由浏览器直接请求(访问);
它需要做2件最核心的工作:
1,(根据请求),决定需要什么数据,并去调用模型文件(类),去获取该数据;
2,(根据请求),决定需要将数据显示在哪个视图文件中。
模型:
Model,是一个php文件,不能直接请求,只能“被载入”而发挥作用。
它的核心工作只有一个:
(根据控制器的要求)去生产数据;
视图:
View,是一个“伪html文件”(因为其中有极简单的php代码),它也不应由浏览器直接请求;
它的作用是:
结合html和css代码,显示相应的变量(数据)
有一个现实生产的类比原理图,可做参考:
类比:
mvc思想演示典型案例
目标:
(删除功能先不做)
模型文件(U):
控制器文件(S):
视图文件:
模型层(Model)的典型实现
模型层的主要作用:
用于处理数据的存取操作,比如表的增删改查;
通常都是根据“控制器的要求”,以返回合适的数据;
有时候,控制器还需要“传递过来”相应的数据,才能获取对应的结果数据;比如:
获取id为5的用户的信息,此时控制器就需要传递过来“5”这个数据;
模型层的典型代码模式
class 模型类名{
function 方法1(){。。。}
function 方法2(){。。。}
function 方法3(){。。。}
。。。。。。。
}
说明:
1,每个方法,都是为了获取“某种数据”;
2,有的方法,可能需要一些参数(形参);
3,这些方法,通常都需要跟数据库打交道,则就都需要“mysqldb”工具类及相关的数据库连接数据;
示例代码:
控制器中调用模型层获取数据的典型做法
require ‘模型层类文件’;
$obj = new 模型对象();
$data = $obj->某个方法();
基础模型类
实现模型类的单例——单例工厂
目标:
模型类本身不变——不保证其本身是单例的;
但:
通过,该“单例工厂”去获得模型类的实例,就是单例的。
我们要的是,设计出这样一个“单例工厂类”;
通过该单例工厂类,去“获取”模型类的对象(实例);
应用(在控制器类文件中):
整个模型层的类库结构图
dao: Data Access Object(数据访问对象);