[源码]详细剖析:ThinkPHP中实例化模型的四种方法详解

[源码]详细剖析:ThinkPHP中实例化模型的四种方法详解

     各位同学、朋友大家好,写这篇日志之前先给大家说声抱歉,因这段时间课程安排的太紧(周一至周日全天+晚自习),所有的时间几乎都被“备课”占用所以最近 本人原创的东西一直无法及时的上传供大家分享,为了表达歉意,本人终于挤出来点时间和写一点关于ThinkPHP框架的使用的学习笔记,希望大家多多指 教。
    今天给大家带来的是关于ThinkPHP中实例化模型的详细用法,相信用过ThinkPHP框架的朋友都知道,实例化模型是i我们连接数据库并对数据库操作的基础,如何才能实例化模型呢?我们今天就来一起分析下:
    首先,什么是模型?
    模型(Model)是 ThinkPHP 中一个很重要的概念,与之有关的还包括模型的定义与实例化。
MVC 是一种将应用程序的逻辑层和表现层进行分离的方法,ThinkPHP 也是基于MVC设计模式的。ThinkPHP 中模型(M)的定义是由 Model 类来完成的。
    其次,ThinkPHP 中基础的模型类就是 Model 类,该类完成了基本的 CURD、ActiveRecord 模式、连贯操作和统计查询等。其他一些高级特性如:

模型的分类:
AdvModel:高级模型类,完成一些如 文本字段、只读字段、序列化字段、乐观锁、多数据库连接 等模型的高级特性
ViewModel:视图模型类,完成了模型的视图操作
RelationModel:关联模型类,完成了模型的关联操作

定义模型: 

  基础模型类 Model 的设计非常灵活,无需进行任何模型定义,就可以进行相关数据表的 ORM 和 CURD 操作。如果需要封装单独的业务逻辑的,就必须定义模型。
    定义的模型类文件放在项目 Lib/Model 目录下,由系统自动加载。
如我们定义对 user 表的操作,文件名为 UserModel.class.php ,
其模型定义为:
class UserModel extends Model{
// 一些业务逻辑……
}
在模块的操作中,可以实例化一个定义的模型,从而实现对应的业务逻辑和对数据库表的操作。

模型实例化
当定义了模型之后,需要在操作中将模型实例化才能具体实现模型中的业务逻辑。
不同的数据业务规则会有不同的模型定义,而在实例化模型的时候也可能不同。ThinkPHP 支持如下几种实例化模型:
实例化基础模型类
实例化其他模型类
实例化用户自定义模型类
实例化空模型类

实例化模型操作的第一种方法
          1)通过 new  Mode(‘表名’)
          如:$user=new Mode(‘User’);
                     $ulist=$user->select();
                      dump($ulist);
  注意: 这种方法比较简单,注意User还可以小写,ThinkPHP会根据User大小写判断是否加上了“_”

实例化模型操作的第二种方法
    实例化当前表的同时,实例化其他自定义的数据库操作类
    如:假设已经存在一个模型 CommonModel
     我们可以同时实例化两个模型
      $user=M('user','CommonModel');
                      当前       另一个
     当然这里我们也可以同时实例化两个表
注意,我们再实例化多个模型时重点是可以使用另一个模型的方法
    比如: CommonModel 有一个自有方法
                  function aa(){
                      echo “aaaaaaaaaaaa”;
                  }
        $user=M('user','CommonModel');
        $user->aa();

       模型实例化第二种方法的优点
   1) 可以自定义自己的方法,而第一种方法则不可以
   2) 可以处理表关联关系的数据
   3) 可以实现更加复杂的业务逻辑

     //另一种写法
     $user= new CommonModel('user');

       CommonModel(对应 Lib/Model/CommonModel.class.php 文件)类必须继承 Model 类,如果没有定义别名导入的话,放在项目 Lib/Model 目录下,系统自动加载。我们可以 在CommonModel 类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类。
如果项目涉及的表非常多,而只有个别表有一些复杂的业务逻辑需要封装,那么上面这两种模型实例化方式相结合是一个不错的选择。

    实例化模型三 自定义模型
     什么是自定义模型?这里我们指的是用户自己创建的,含有自有的方法,可以封装ThinkPHP为我们提供的高级功能的模型
使用方法:
     1) 在lib/Model/中建立一个和表名同名的
     2) 在Action 中调用
    示例:
   //实例化模型,通过new 模型的方法
    $user=new UserModel();
     //执行查询,返回数组
    $list=$user->select();
    //查看数组元素内容
    dump($list);
    //调用模型的方法
    $user->test();  
      示例:
注意:通过 new XXXModel() 实例化模型 ,一般
                  “XXX”对应数据库中的表名
                   实例化的时候,可以将数据库中名为XXX
                   表的所有字段全部取出来

这种方法同样也对应一个快捷处理方法
“D”    D(‘User’) 等同于 $user=new UserModel()
       D(‘模型名’) 和new UserModel() 还存在区别
1)D() 方法可以自动检测连接数据库是否正常,不存在会抛出一个异常
2)D() 方法对于已经实例化的模型不在进行重复实例化
3)D() 方法默认只调用当前项目(模块)的模型类
       如果想调用其他模块必须如下使用D()方法
          后台模块  模型类
          D(‘admin’,’user’);
4)使用new 可以new 多个
   
实例化模型四 空模型
      所谓空模型 就是实例化时没有任何参数,表示实例化时不知道要实例化哪个表
     //实例化空模型
    $user=new Model();
    //执行原始的Sql
    $list=$user->query("select * from think_user");
    //输出结果
    dump($list);

可以通过实例化模型第四种方法执行原生的SQL语句


    总结 ,以上是给大家总结的ThinkPHP模型实例化的四种方法,每种方式都有各自的特点,大家可以根据业务需要决定要使用何种方式
   
    源码下载:
    tpModel0505.rar

   [原创地址]    [源码下载]    [更多原创,多多支持多]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值