您的位置:首页 > 编程语言 > PHP开发

ThinkPHP快捷方法M与D的区别

2013-10-10 16:53 411 查看
ThinkPHP快捷方法M与D的区别

两个有共同点都是实例化对象用的。

先看看代码

函数M:

view plaincopy to clipboardprint?

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];  

}  

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方法:

view plaincopy to clipboardprint?

function D($name = '', $app = '')  

{   

   static$_model = array();   

   if(emptyempty($name))   

   //$name为空作用就等同 函数M();   

       returnnew Model;   

   if(emptyempty($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';   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp function