Thinkphp下实现D函数用于实例化Model格式

Posted 圆柱模板

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thinkphp下实现D函数用于实例化Model格式相关的知识,希望对你有一定的参考价值。

   

* D函数用于实例化Model 格式 项目://分组/模块
* @param string $name Model资源地址
* @param string $layer 业务层名称
* @return Model

测试项目地址:http://www.yixingmuban.com/

  

function D($name=‘‘,$layer=‘‘) {
    if(empty($name)) return new Model;
    static $_model  =   array();
    $layer          =   $layer?$layer:C(‘DEFAULT_M_LAYER‘);
    if(strpos($name,‘://‘)) {// 指定项目
        list($app)  =   explode(‘://‘,$name);
        $name       =   str_replace(‘://‘,‘/‘.$layer.‘/‘,$name);
    }else{
        $app        =   C(‘DEFAULT_APP‘);
        $name       =   $app.‘/‘.$layer.‘/‘.$name;
    }
    if(isset($_model[$name]))   return $_model[$name];
    $path           =   explode(‘/‘,$name);
    if($list = C(‘EXTEND_GROUP_LIST‘) && isset($list[$app])){ // 扩展分组
        $baseUrl    =   $list[$app];
        import($path[2].‘/‘.$path[1].‘/‘.$path[3].$layer,$baseUrl);
    }elseif(count($path)>3 && 1 == C(‘APP_GROUP_MODE‘)) { // 独立分组
        $baseUrl    =   $path[0]== ‘@‘ ? dirname(BASE_LIB_PATH) : APP_PATH.‘../‘.$path[0].‘/‘.C(‘APP_GROUP_PATH‘).‘/‘;
        import($path[2].‘/‘.$path[1].‘/‘.$path[3].$layer,$baseUrl);
    }else{
        import($name.$layer);
    } 
    $class          =   basename($name.$layer);
    if(class_exists($class)) {
        $model      =   new $class(basename($name));
    }else {
        $model      =   new Model(basename($name));
    }
    $_model[$name]  =  $model;
    return $model;
}

  

以上是关于Thinkphp下实现D函数用于实例化Model格式的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP函数详解:M方法

ThinkPHP3.2.3 M函数和D函数的区别

Thinkphp各种方法知识图谱

thinkphp3.2.3怎么调用model里的方法

thinkphp中的大字母的意思

Thinkphp框架中D()和M()的区别