CodeIgnater 中的 load 方法是从哪来的,该怎么解决

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);