在Thinkphp有四种不同的方法实例化对象,new方法、D方法、M方法、空模型方法,比较常用的是D方法和M方法。本文大都是官方手册东西,自己稍微做了下总结。
New方法
new方法是最好理解的一种方法,就是普通的实例化类,参数可选,依次是表名、表前缀、数据库连接信息,大多数情况下不需要传参。
new HomeModelNewModel('new','think_','DB_CONFIG');
D方法
D方法Thingkphp(下面简称TP)系统提供的一个实例化类的快捷方法,通过D方法我们可以快速的实例化一个类并使用。
//实例化模型
$User = D('User');
// 相当于
$User = new HomeModelUserModel();
// 执行具体的数据操作
$User->select();
当 HomeModelUserModel 类不存在的时候,D函数会尝试实例化公共模块下面的 CommonModelUserModel 类,如果还不存在的话则会实例化系统的ThinkModel基类,这是一点值得注意的地方。
M方法
D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。
// 使用M方法实例化
$User = M('User');
// 和下面用法等效
$User = new ThinkModel('User');
// 执行其他的数据操作$User->select();
如果你的模型类有自己的业务逻辑,M方法是无法支持的,就算是你已经定义了具体的模型类,M方法实例化的时候是会直接忽略。
实例化空模型类
如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了
//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');
总结
我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法,M方法会直接忽略自定义的具体模型类。