参考来源:http://blog.csdn.net/siren0203/archive/2010/10/29/5974415.aspx
两个有共同点..都是实例化对象用的..
但是 在使用时 两者却不一样...为什么??
先看看代码
函数M
function M($name = '', $class = 'Model')
{
static $_model = array();
if (!isset($_model[$name . '_' . $class]))
// 默认也就是 new Model($name)
$_model[$name . '_' . $class] = new $class($name);
//返回实例化对象
return $_model[$name . '_' . $class];
}
$_model[$name . '_' . $class] = new $class($name);
默认也就是 new Model($name)
也就是说
M返回的是Model的对象
如果$name不为空 那么$name的意义也就是代表数据库的表名(这个以后说)
通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,
即使这个对应的Model文件不存在
再来看D函数
function D($name = '', $app = '')
{
static $_model = array();
if (empty($name))
//$name为空 作用就等同 函数M();
return new Model;
if (empty($app))
//默认模块名称 在Common/convention.php中定义 =@
$app = C('DEFAULT_APP');
//如果已经存在对象 直接返回
if (isset($_model[$app . $name]))
return $_model[$app . $name];
$OriClassName = $name;
//如果$name参数是以 @.**.模块名 这种参数传递的话
if (strpos($name, '.'))
{
$array = explode('.', $name);
//$name=模块名
$name = array_pop($array);
$className = $name . 'Model';
//导入Model模块所在的文件
import($app . '.Model.' . implode('.', $array) . '.' . $className);
}
//直接导入
else
{
$className = $name . 'Model';
import($app . '.Model.' . $className);
}
//实例化对象返回
if (class_exists($className))
{
$model = new $className();
} else
{
$model = new Model($name);
}
$_model[$app . $OriClassName] = $model;
return $model;
}
具体注释已经在代码里面了
两者对比 大家应该能看出来...
D函数实例化的是 你当前项目的Lib/Model下面的模块
如果该模块不存在的话 直接返回实例化Model的对象(意义就与M()函数相同)
而M 只返回 实例化 Model的对象..它的$name参数 作为数据库的表名来处理对数据库的操作
通俗点说,D就是实例化一个基于Model文件的Model,而M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在。
再通俗一点说就是:
M实例化参数是数据库的表名.
D实例化的是你自己在model文件夹下面建立的模型文件.
分享到:
相关推荐
计算机后端-PHP视频教程. php之thinkphp81_82 M函数和D函数.wmv
thinkphp单字母函数功能及用法总结PPT资料,(C U I A D M T E G S F )推荐下载
本文实例讲述了thinkPHP模板中函数的使用方法。分享给大家供大家参考,具体如下: 1.php中的方法使用 <?php $var_num = "13966778888"; $str = substr_replace($var_num,'*****',3,5); echo $str; $var_date...
M方法用于实例化一个基础模型类,和D方法的区别在于: 1、不需要自定义模型类,减少IO加载,性能较好; 2、实例化后只能调用基础模型类(默认是Model类)中的方法; 3、可以在实例化的时候指定表前缀、数据库和...
下面小编就为大家带来一篇thinkphp 字母函数详解T/I/N/D/M/A/R/U。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
5.3.3D函数实例化 55 5.3.4空模型实例化 55 5.4 连贯操作 55 5.4.1where 56 5.4.2table 57 5.4.3alias 57 5.4.4data 58 5.4.5field 58 5.4.6order 59 5.4.7limit 60 5.4.8page 61 5.4.9group 61 5.4....
thinkphp 开发中常见问题 mvc介绍、快速架构项目、M\D方法、调试模式 导入自己的函数库、rbac、crud、pathinfo等
select FROM_UNIXTIME(o.create_time,'%Y-%m-%d') create_time from table 方式二 使用模型获取器 withAttr, 在该方法中用date函数格式化 ->field('*') ->withAttr('create_time',function ($value,$data) { ...
date(“Y-m-d H:i”,$unixtime) 2.php中获得今天零点的时间戳 要获得零点的unix时间戳,可以使用$todaytime=strtotime(“today”), 然后再使用date(“Y-m-d H:i”,$todaytime)转换为日期。 3.php中时间戳转换为...