- A+
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"); }
这样就可以使我们的代码变得更加简洁,而且实现了真正的按需加载。