MVC:
是什么?
一种架构:写代码的规范,按照这种结构去写
有什么优势:
因为之前处理数据的和负责业务逻辑的写在一个PHP文件里面,如果项目做大的话,就会特复杂,所以我们可以把负责处理数据的和显示数据的,php业务逻辑的分开写,各司其职,提高效率
M V C 各自的职责是什么:
M ----- 处理数据
V------ 处理显示的
C------ 控制器(司令)协调M 和V的
如何让他们关联起来
1,index.php 通过地址栏传递参数
2,获得传递的参数来调用不同的控制器(Controller)
3,控制器再根据参数调用不同的动作(Action)
1,控制器的职责:
命令模型层处理数据
1,模型层的代码“:
模型层命名规则:
基类模型:最基本的(被提取出来的),把数据库常用的操作提取出来,放到baseModel.class.php
做软件开发的注意:能不用数据库就不用,
由于链接数据库需要用户名密码
一般我们定义私有的属性,这样可以避免其他的成员来访问,那么怎么访问这些私有属性呢?
通过在构造方法中,实现
当我们实例化一个对象时,会自动调用这个类的构造方法,这样就给我们提供了一个访问该类的私有属性的契机(机会)
面向对象特性:
1,继承(通过继承可以获得不同类的属性和方法)
2,封装(类库),将公共部分封装一个类
3,多态
继承:子类会继承父类的属性和方法,如果子类有构造函数,子类使用自己的构造函数,如果没有使用父类的构造函数(__construct)
类的属性:
Public 公有的(类的其他成员可以直接访问)
Private 私有的(只有当前类的对象可以访问)
Protected 受保护的(继承之后的对象可以访问)
注意:
1,一般我们在控制器里面定义控制器的动作(Action),通过地址栏a=传递,命名规则写成xxxAction()
2,return 返回当前函数的返回值
现在由于每个类,相对于index.php,因为他最终被index.php加载进去的
入股加载的文件过多的话,相对路径会非常复杂
但是绝对路径(根目录)不变的
优化方案:
因为所有的文件都要先经过入口文件,所以我的思路就是在入口(index.php)文件,定义常量(保存网站的根目录)
常量:
1,常量定义:一般大写;
2,常量的作用域是全局的不用考虑的作用域范围,
3,在脚本运行期间,常量的值不变
如何定义:
Define(),参数1,常量名;参数2,常量值
获得网站的根目录:
通过系统内置的常量__FILE__获得
命令视图层显示数据
我们要把smarty作为视图层,实现数据的显示
本身没有这个功能,但是可以借助别的文件来实现,这个功能就是插件,一般我们把插件放到plugins目录下面
一般缓存或者临时文件,我们放到data目录里面
由于更新数据后还要显示更新后的数据,需要smarty,所以我们再次将smarty的常用配置封装(提取)出来,通常我们将控制器的公共的文件封装到基类控制器(baseController)
面向对象思想去封装:
类 方法
class goodsController{
publicfunction searchAction(){
//控制器命令模型层处理数据
requireROOT_PATH."models/goodsModel.class.php";
$goodsModel = newgoodsModel('localhost','ajax','root','');
$row = $goodsModel ->search();
//命令视图层显示数据
requireROOT_PATH."plugins/smarty/smarty.class.php";
$smarty = new Smarty();
$smarty ->template_dir =ROOT_PATH."views/";
$smarty ->compile_dir =ROOT_PATH."data/template_c";
$smarty ->assign('list',$row);
$smarty ->display("1.tpl");
}
publicfunction updateAction(){
}