ljnchn I can do beter.

Thinkphp(3.2)实例化对象的四种方法比较

在Thinkphp有四种不同的方法实例化对象,new方法、D方法、M方法、空模型方法,比较常用的是D方法和M方法。本文大都是官方手册东西,自己稍微做了下总结 ### 一、new 方法 new方法是最好理解的一种方法,就是普通的实例化类
<?php
//参数可选,依次是表名、表前缀、数据库连接信息,大多数情况下不需要传参
new \Home\Model\NewModel('new','think_','DB_CONFIG');
?>

二、D方法

D方法Thingkphp(下面简称TP)系统提供的一个实例化类的快捷方法,通过D方法我们可以快速的实例化一个类并使用。

<?php
//实例化模型
$User = D('User');
// 相当于 
$User = new \Home\Model\UserModel();
// 执行具体的数据操作
$User->select();
?>

\Home\Model\UserModel 类不存在的时候,D函数会尝试实例化公共模块下面的 \Common\Model\UserModel 类,如果还不存在的话则会实例化系统的\Think\Model基类,这是一点值得注意的地方。

D方法

三、M方法

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

<?php
// 使用M方法实例化
$User = M('User');
// 和下面用法等效
 $User = new \Think\Model('User'); 
 // 执行其他的数据操作$User->select();
 ?>

如果你的模型类有自己的业务逻辑,M方法是无法支持的,就算是你已经定义了具体的模型类,M方法实例化的时候是会直接忽略。

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

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

总结

我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法,M方法会直接忽略自定义的具体模型类。