zoukankan      html  css  js  c++  java
  • PHP.23-ThinkPHP框架的三种模型实例化-(D()方法与M()方法的区别)

    三种模型实例化

    原则上:每个数据表应对应一个模型类(Home/Model/GoodsModel.class.php -->  表tp_goods)

    1、直接实例化

      和实例化其他类库一样实例化模型类,通过路径进行实例化

    $User = new HomeModelUserModel();
    $Info = new AdminModelInfoModel();
    // 带参数实例化
    $New  = new HomeModelNewModel('blog','think_',$connection);  //第一个参数为模型名【模型的名称 和数据表前缀一起配合用于自动识别数据表名称】,第二个是表前缀,第三个是连接信息(大部分情况下不需要这些参数也可实例化)

    2、用D方法实例化

      设自定义模型HomeModelUserModel类存在

      HomeControllerUserController.class.php中实例化

    <?php
        //实例化模型
        $User = D('User');
        // 相当于 $User = new HomeModelUserModel();
        // 执行具体的数据操作  可以是模型类中自定义的数据操作方法
        $User->select();

                         D方法的参数就是模型的名称,并且和模型类的大小写定义是一致的,例如:

    参数实例化的模型文件(假设当前模块为Home)
    User 对应的模型类文件的 HomeModelUserModel.class.php
    UserType 对应的模型类文件的 HomeModelUserTypeModel.class.php

      D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的ThinkModel基类,同时对于已实例化过的模型,不会重复去实例化。

    D方法还可以支持跨模块调用,需要使用:
        //实例化Admin模块的User模型
        D('Admin/User');
        //实例化Extend扩展命名空间下的Info模型
        D('Extend://Editor/Info');

      注意:跨模块实例化模型类的时候 不支持自动加载公共模块的模型类

    3、用M方法实例化

      D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,性能会更高

    // 使用M方法实例化
        $User = M('User');        //此时实例化的是数据表tp_user,而不一定会有对应的模型类UserModel.class.php
    // 和用法 $User = new ThinkModel('User'); 等效
    // 执行其他的数据操作
        $User->select();

      如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了

    //实例化空模型
        $Model = new Model();
    //或者使用M快捷方法是等效的$Model = M();
    //进行原生的SQL查询
        $Model->query('SELECT * FROM think_user WHERE status = 1');

    注:D方法和M方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法

  • 相关阅读:
    asp.net textbox 控件如何清除缓存
    extjs Accordion 怎样把展开符号:加号(+)放在左边?
    ORACLE 调试输出,字符串执行函数
    Oracle中table函数的应用
    Oracle LAST_DAY(d)
    Oracle 管道化表函数(Pipelined Table)[转载]
    ext中fieldLabel文本太宽的问题,以及Panel居中显示
    什么是泛型(C#)
    设置Ext tab的宽度自动适应
    js选择日期即时把两个日期相差天数显示出来?
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/6772719.html
Copyright © 2011-2022 走看看