【thinkphp中d方法的区别】THINKPHP中D方法调用逻辑层类

时间:2019-10-15  来源:thinkphp  阅读:

ThinkPHP的D函数十分强大,一般情况下用D方法最多的情况是实例化自定义模型类,实现数据库相关的操作,但是D方法的功能远远不仅于此,D方法还可用于逻辑层,服务层自定义类的实例化。

调用格式如下:

D("[项目://][分组/]模型","模型层名称")

关于D方法的一般用法本文不再描述,就是常见的D(‘User’)实例化Model下面的UserModel.class.php。


我们在LIB_PATH,也就是和Controller(以前版本叫Action),Model文件夹同级的目录建立Logic或者Service文件夹。

ThinkPHP分层模型逻辑层

在Logic文件夹中新建文件UserLogic.class.php,作为用户逻辑业务的一个类,那么实例化这个类的时候,可以用tp自带的D方法,如下:


D("User","Logic");

这样就调用Logic文件夹下的UserLogic.class.php文件并实例化class UserLogic,专业一点的说法是D方法支持分成模型并实例化自定义类。这里的分层模型指的就是Logic和Service这样的目录。

注:分层模型从ThinkPHP 3.1版本开始支持。

我们来看看ThinkPHP D方法的源码:


/**
 * D函数用于实例化模型类 格式 [资源://][模块/]模型
 * @param string $name 资源地址
 * @param string $layer 模型层名称
 * @return Model
 */
function D($name="",$layer="") {
    if(empty($name)) return new Think\Model;
    static $_model  =   array();
    $layer          =   $layer? $layer : C("DEFAULT_M_LAYER");
    if(isset($_model[$name.$layer]))
        return $_model[$name.$layer];
    $class          =   parse_res_name($name,$layer);
    if(class_exists($class)) {
        $model      =   new $class(basename($name));
    }elseif(false === strpos($name,"/")){
        // 自动加载公共模块下面的模型
        $class      =   "\\Common\\".$layer."\\".$name.$layer;
        $model      =   class_exists($class)? new $class($name) : new Think\Model($name);
    }else {
        Think\Log::record("D方法实例化没找到模型类".$class,Think\Log::NOTICE);
        $model      =   new Think\Model(basename($name));
    }
    $_model[$name.$layer]  =  $model;
    return $model;
}

当然,我们也可以重新写个调用分层模型中自定义类的方法,如:

/**
 * 业务逻辑层调用函数
 * @param string $name 业务模型名称
 * @return object
*/
function logic($name){
    static $_obj=array();
    $layer="Logic";
    $class=$name.$layer;
    if(isset($_obj[$name])){
        return $_obj[$name];
    }
    require LIB_PATH."{$layer}/".$class.".class.php";
    $_obj[$name] = new $class($name);
    return $_obj[$name];
}

写到tp公共函数中,以后调用Logic分层模型(实际上就是这个文件夹)下的自定义类就可以直接这样用:Logic(‘User’)就ok了。

【thinkphp中d方法的区别】THINKPHP中D方法调用逻辑层类

http://m.bbyears.com/jiaocheng/73405.html

推荐访问:thinkphp漏洞 thinkphp框架原理
相关阅读 猜你喜欢
本类排行 本类最新