CI 中的 load 方法是从哪来的
看 CI 默认文件中有
public function index()
{
$this->load->view('welcome_message');
}
按说这个 load 是一个方法,但是查了一下没有呢,怪事啊!难道他是 php 自带的函数不成
—— 解决思路
———————-
显然不是,如果是 PHP 自带的函数,最起码应该是 load (); 而不是
$this->load->xxx
既然是 $this->load,也就是说,load 实际上是 Controller 的一个成员。
CI_controller
初始化的时候(system/core/Controller.php):
$this->load =& load_class(‘Loader’, ‘core’);
换句话说,load
实际上是 Loader 的实例,它是 ci 的加载器,主要负责 CI 的类库的加载,例如:
$this->load->config //
配置
$this->load->model // 模型
$this->load->view // 视图。
我们的系统 b2core 框架里面,也有 load () 的这个方法,具体代码如下:
/* B2 系统函数
* load($path,$instantiate) 可以动态载入对象,如:控制器、Model、库类等
* $path 是类文件相对 app 的地址
* $instantiate 为 False 时,仅引用文件,不实例化对象
* $instantiate 为数组时,数组内容会作为参数传递给对象
*/
function &load($path, $instantiate = TRUE )
{
$param = FALSE;
if(is_array($instantiate)) {
$param = $instantiate;
$instantiate = TRUE;
}
$file = explode('/',$path);
$class_name = array_pop($file);
$object_name = md5($path);
static $objects = array();
if (isset($objects[$object_name])) {
if($objects[$object_name] == TRUE && $instantiate == TRUE) {
if ($param == FALSE) return new $class_name();
return new $class_name($param);
}
return $objects[$object_name];
}
require(APP.$path.'.php');
if ($instantiate == FALSE) $objects[$object_name] = TRUE;
elseif ($param) $objects[$object_name] = new $class_name($param);
else $objects[$object_name] = new $class_name();
return $objects[$object_name];
}
所以,load () 用来引入文件 utility.php 的写法如下,就不要感到奇怪了。
load('lib/utility',FALSE);