ThinkPHP5 Loader 类介绍以及使用

  • A+
所属分类:PHP ThinkPHP5

Loader 类功能:实现类库或者资源的自动加载

源代码:/thinkphp/libary/think/Loader.php

我们主要来看几个用到的方法:

模型加载方法

/**
     * 实例化(分层)模型
     * @access public
     * @param  string $name         Model名称
     * @param  string $layer        业务层名称
     * @param  bool   $appendSuffix 是否添加类名后缀
     * @param  string $common       公共模块名
     * @return object
     * @throws ClassNotFoundException
     */
    public static function model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common')
    {
        $uid = $name . $layer;

        if (isset(self::$instance[$uid])) {
            return self::$instance[$uid];
        }

        list($module, $class) = self::getModuleAndClass($name, $layer, $appendSuffix);

        if (class_exists($class)) {
            $model = new $class();
        } else {
            $class = str_replace('\\' . $module . '\\', '\\' . $common . '\\', $class);

            if (class_exists($class)) {
                $model = new $class();
            } else {
                throw new ClassNotFoundException('class not exists:' . $class, $class);
            }
        }

        return self::$instance[$uid] = $model;
    }

说明:

返回的是模型对象,可以直接调用模型的方法,如:get、all等方法。

model方法中进行了缓存。

使用示例:

Loader::model("模型名称")->save();

扩展使用:

在实际项目中,我们可能会进行分层,如:逻辑层、服务层等等。在再调用时,我们往往需要使用 use 或者 new方法来实例化,这样会很麻烦。因此,我们可以利用 model 方法进行扩展。

调用服务层(Service):

public function loaderService($name)
{
    return Loader::model($name, "service");
}

这样就可以使我们的代码变得更加简洁,而且实现了真正的按需加载。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: