首页 > php教程 > php手册 > 正文

CI框架装载器Loader.php源码分析

WBOY
发布: 2016-06-06 20:18:04
原创
1172 人浏览过

前面我们分析了CI框架的session类和安全类文件,今天我们来分析下CI框架的装载器Loader.php文件的源码

顾名思义,装载器就是加载元素的,使用CI时,经常加载的有:

$this->load->library()
$this->load->view()
$this->load->model()
$this->load->database()
$this->load->helper()
$this->load->config()
$this->load->add_package_path()

复制代码 代码如下:


/**
 * Loader Class
 *
 * 用户加载views和files,常见的函数有model(),view(),library(),helper()
 *
 * Controller的好助手,$this->load =& load_class('Loader', 'core');,加载了loader,Controller就无比强大了
 */
CI_Loader 类 {
 受保护的$_ci_ob_level;
 protected $_ci_view_paths = array();
 protected $_ci_library_paths = array();
 protected $_ci_model_paths = array();
 protected $_ci_helper_paths = array();
 受保护的 $_base_classes = array(); // 由控制器类
设置  protected $_ci_cached_vars = array();
 protected $_ci_classes   = array();
 protected $_ci_loaded_files = array();
 
 protected $_ci_models   = array();
 protected $_ci_helpers   = array();
 protected $_ci_varmap   = array('unit_test' => 'unit',
           'user_agent'=>; '代理');
 公共函数 __construct()
 {      
                //获取缓冲级别
  $this->_ci_ob_level = ob_get_level();
  //库路径
                $this->_ci_library_paths = array(APPPATH, BASEPATH);
                //帮助路径
  $this->_ci_helper_paths = array(APPPATH, BASEPATH);
                //模型路径
  $this->_ci_model_paths = array(APPPATH);
                //查看路径
  $this->_ci_view_paths = array(APPPATH.'views/' => TRUE);
  log_message('debug', "加载器类已初始化");
 }
 // ------------------------------------------------ --------------------
 /**
  * 初始化Loader
  *
 */
 公共函数initialize()
 {
  $this->_ci_classes = array();
  $this->_ci_loaded_files = array();
  $this->_ci_models = array();
                //将is_loaded(common中加载记录核心类函数)加载的核心类排序_base_classes
  $this->_base_classes =& is_loaded();
                //加载autoload.php配置中文件
  $this->_ci_autoloader();
  返回 $this;
 }
 // ------------------------------------------------ --------------------
 /**
  * 检测类是否加载
 */
 公共函数 is_loaded($class)
 {
  if (isset($this->_ci_classes[$class]))
  {
   返回 $this->_ci_classes[$class];
  }
  返回FALSE;
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载Class
 */
 公共函数库($library = '', $params = NULL, $object_name = NULL)
 {
  if (is_array($library))
  {
   foreach($library 作为 $class)
   {
    $this->library($class, $params);
   }
   返回;
  }
                //如果$library为空或者已经加载。。。
  if ($library == '' OR isset($this->_base_classes[$library]))
  {
   返回FALSE;
  }
  if ( ! is_null($params) && ! is_array($params))
  {
   $params = NULL;
  }
  $this->_ci_load_class($library, $params, $object_name);
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载和实例化model
 */
 公共函数模型($model, $name = '', $db_conn = FALSE)
 {
                //CI支持负载加载多个模型
  if (is_array($model))
  {
   foreach($model 为 $babe)
   {
    $this->model($babe);
   }
   返回;
  }
  if ($model == '')
  {
   返回;
  }
  $path = '';
  // 是否存在子目录
  if (($last_slash = strrpos($model, '/')) !== FALSE)
  {
   // 路径在最后一个斜杠前面
   $path = substr($model, 0, $last_slash 1);
   // 以及后面的型号名称
   $model = substr($model, $last_slash 1);
  }
  if ($name == '')
  {
   $name = $model;
  }
  if (in_array($name, $this->_ci_models, TRUE))
  {
   返回;
  }
  $CI =& get_instance();
  if (isset($CI->$name))
  {
   show_error('您正在加载的模型名称是已在使用的资源名称:'.$name);
  }
  $模型 = strtolower($模型); //模型文件名全小写
  foreach ($this->_ci_model_paths as $mod_path)
  {
   if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
   {
    继续;
   }
   if ($db_conn !== FALSE AND !class_exists('CI_DB'))
   {
    if ($db_conn === TRUE)
    {
     $db_conn = '';
    }
    $CI->加载->数据库($db_conn, FALSE, TRUE);
   }
   if ( !class_exists('CI_Model'))
   {
    load_class('模型', '核心');
   }
   require_once($mod_path.'models/'.$path.$model.'.php');
   $model = ucfirst($model);
   $CI->$name = new $model();
                        //保存在Loader::_ci_models中,以后可以用它来判断某个模型是否已经加载过。
   $this->_ci_models[] = $name;
   返回;
  }
  // 找不到模型
  show_error('无法找到您指定的模型:'.$model);
 }
 // ------------------------------------------------ --------------------
 /**
  * 数据库Loader
 */
 公共函数数据库($params = '', $return = FALSE, $active_record = NULL)
 {
  // 获取超级对象
  $CI =& get_instance();
  // 是否需要加载db
  if (class_exists('CI_DB') AND $return == FALSE AND $active_record == NULL AND isset($CI->db) AND is_object($CI->db))
  {
   返回FALSE;
  }
  require_once(BASEPATH.'database/DB.php');
  if ($return === TRUE)
  {
   return DB($params, $active_record);
  }
  // 初始化db变量。  需要预防
  // 某些配置的引用错误
  $CI->db = '';
  // 加载数据库类
  $CI->db =& DB($params, $active_record);
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载数据库工具类
 */
 公共函数 dbutil()
 {
  if ( !class_exists('CI_DB'))
  {
   $this->数据库();
  }
  $CI =& get_instance();
  // 为了向后兼容,加载 dbforge,这样我们就可以扩展 dbutils
  // 这种用法已被弃用并强烈反对
  $CI->load->dbforge();
  require_once(BASEPATH.'database/DB_utility.php');
  require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_utility.php');
  $class = 'CI_DB_'.$CI->db->dbdriver.'_utility';
  $CI->dbutil = new $class();
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载Database Forge类
  *
  * @return 字符串
 */
 公共函数 dbforge()
 {
  if ( !class_exists('CI_DB'))
  {
   $this->数据库();
  }
  $CI =& get_instance();
  require_once(BASEPATH.'database/DB_forge.php');
  require_once(BASEPATH.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_forge.php');
  $class = 'CI_DB_'.$CI->db->dbdriver.'_forge';
  $CI->dbforge = new $class();
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载视图文件
 */
 公共函数 view($view, $vars = array(), $return = FALSE)
 {
  return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载普通文件
 */
 公共函数文件($path, $return = FALSE)
 {
  return $this->_ci_load(array('_ci_path' => $path, '_ci_return' => $return));
 }
 // ------------------------------------------------ --------------------
 /**
  * 设置变量
  *
  * 设置变量后,它们将在
内可用   * 控制器类及其“视图”文件。
  *
 */
 公共函数 vars($vars = array(), $val = '')
 {
  if ($val != '' AND is_string($vars))
  {
   $vars = array($vars => $val);
  }
  $vars = $this->_ci_object_to_array($vars);
  if (is_array($vars) AND count($vars) > 0)
  {
   foreach ($vars as $key => $val)
   {
    $this->_ci_cached_vars[$key] = $val;
   }
  }
 }
 // ------------------------------------------------ --------------------
 /**
  * 检查并获取变量
 */
 公共函数 get_var($key)
 {
  返回 isset($this->_ci_cached_vars[$key]) ? $this->_ci_cached_vars[$key] : NULL;
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载helper
 */
 公共函数助手($helpers = array())
 {
  foreach ($this->_ci_prep_filename($helpers, '_helper') as $helper)
  {
   if (isset($this->_ci_helpers[$helper]))
   {
    继续;
   }
   $ext_helper = APPPATH.'helpers/'.config_item('subclass_prefix').$helper.'.php';
   // 如果是扩展助手的话
   if (file_exists($ext_helper))
   {
    $base_helper = BASEPATH.'helpers/'.$helper.'.php';
    if ( !file_exists($base_helper))
    {
     show_error('无法加载请求的文件:helpers/'.$helper.'.php');
    }
    include_once($ext_helper);
    include_once($base_helper);
    $this->_ci_helpers[$helper] = TRUE;
    log_message('debug', '帮助程序已加载: '.$helper);
    继续;
   }
   // 如果不是扩展helper,helper路径中加载helper
   foreach ($this->_ci_helper_paths as $path)
   {
    if (file_exists($path.'helpers/'.$helper.'.php'))
    {
     include_once($path.'helpers/'.$helper.'.php');
     $this->_ci_helpers[$helper] = TRUE;
     log_message('debug', '帮助程序已加载: '.$helper);
     休息;
    }
   }
   // 如果该helper还没加载成功的话,说明加载helper失败
   if ( ! isset($this->_ci_helpers[$helper]))
   {
    show_error('Unable to load the requested file: helpers/'.$helper.'.php');
   }
  }
 }
 // --------------------------------------------------------------------
 /**
  * 可以看到helpers调用也是上面的helper,只是helpers的别名而已
 */
 public function helpers($helpers = array())
 {
  $this->helper($helpers);
 }
 // --------------------------------------------------------------------
 /**
  * 加载language文件
 */
 public function language($file = array(), $lang = '')
 {
  $CI =& get_instance();
  if ( ! is_array($file))
  {
   $file = array($file);
  }
  foreach ($file as $langfile)
  {
   $CI->lang->load($langfile, $lang);
  }
 }
 // --------------------------------------------------------------------
 /**
  * 加载配置文件
 */
 public function config($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
 {
  $CI =& get_instance();
  $CI->config->load($file, $use_sections, $fail_gracefully);
 }
 // --------------------------------------------------------------------
 /**
  * Driver
  *
  * 加载 driver library
 */
 public function driver($library = '', $params = NULL, $object_name = NULL)
 {
  if ( ! class_exists('CI_Driver_Library'))
  {
   // we aren't instantiating an object here, that'll be done by the Library itself
   require BASEPATH.'libraries/Driver.php';
  }
  if ($library == '')
  {
   return FALSE;
  }
  // We can save the loader some time since Drivers will *always* be in a subfolder,
  // and typically identically named to the library
  if ( ! strpos($library, '/'))
  {
   $library = ucfirst($library).'/'.$library;
  }
  return $this->library($library, $params, $object_name);
 }
 // --------------------------------------------------------------------
 /**
  * 添加 Package 路径
  *
  * 把package路径添加到库,模型,助手,配置路径
 */
 public function add_package_path($path, $view_cascade=TRUE)
 {
  $path = rtrim($path, '/').'/';
  array_unshift($this->_ci_library_paths, $path);
  array_unshift($this->_ci_model_paths, $path);
  array_unshift($this->_ci_helper_paths, $path);
  $this->_ci_view_paths = array($path.'views/' => $view_cascade) $this->_ci_view_paths;
  $config =& $this->_ci_get_component('config');
  array_unshift($config->_config_paths, $path);
 }
 // --------------------------------------------------------------------
 /**
  * 获取Package Paths,,默认不包含BASEPATH
 */
 public function get_package_paths($include_base = FALSE)
 {
  return $include_base === TRUE ? $this->_ci_library_paths : $this->_ci_model_paths;
 }
 // --------------------------------------------------------------------
 /**
  * 清晰除包路径
  *
  * 从库、模型和辅助路径数组中删除路径(如果存在)
  * 如果没有提供路径,则删除最近添加的路径。
  *
 */
 public function remove_package_path($path = '', $remove_config_path = TRUE)
 {
  $config =& $this->_ci_get_component('config');
  if ($path == '')
  {
   $void = array_shift($this->_ci_library_paths);
   $void = array_shift($this->_ci_model_paths);
   $void = array_shift($this->_ci_helper_paths);
   $void = array_shift($this->_ci_view_paths);
   $void = array_shift($config->_config_paths);
  }
  其他
  {
   $path = rtrim($path, '/').'/';
   foreach (array('_ci_library_paths', '_ci_model_paths', '_ci_helper_paths') as $var)
   {
    if (($key = array_search($path, $this->{$var})) !== FALSE)
    {
     取消设置($this->{$var}[$key]);
    }
   }
   if (isset($this->_ci_view_paths[$path.'views/']))
   {
    取消设置($this->_ci_view_paths[$path.'views/']);
   }
   if (($key = array_search($path, $config->_config_paths)) !== FALSE)
   {
    取消设置($config->_config_paths[$key]);
   }
  }
  // 保证应用默认的路径依然存在
  $this->_ci_library_paths = array_unique(array_merge($this->_ci_library_paths, array(APPPATH, BASEPATH)));
  $this->_ci_helper_paths = array_unique(array_merge($this->_ci_helper_paths, array(APPPATH, BASEPATH)));
  $this->_ci_model_paths = array_unique(array_merge($this->_ci_model_paths, array(APPPATH)));
  $this->_ci_view_paths = array_merge($this->_ci_view_paths, array(APPPATH.'views/' => TRUE));
  $config->_config_paths = array_unique(array_merge($config->_config_paths, array(APPPATH)));
 }
 // ------------------------------------------------ --------------------
 /**
  * 装载机
  *
  * 该函数用于加载视图和文件。
  * 变量以 _ci_ 为前缀以避免与
符号冲突   * 可用于查看文件的变量
  *
  * @param数组
  * @return void
 */
 受保护函数 _ci_load($_ci_data)
 {
  // 设置默认数据变量
  foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val)
  {
   $$_ci_val = (!isset($_ci_data[$_ci_val])) ?假:$_ci_data[$_ci_val];
  }
  $file_exists = FALSE;
                //如果$_ci_path不为空,则说明当前要加载普通文件。Loader::file会有path
  if ($_ci_path != '')
  {
   $_ci_x = 爆炸('/', $_ci_path);
   $_ci_file = end($_ci_x);
  }
  其他
  {
   $_ci_ext = 路径信息($_ci_view, PATHINFO_EXTENSION);
   $_ci_file = ($_ci_ext == '') ? $_ci_view.'.php' : $_ci_view;
   foreach ($this->_ci_view_paths as $view_file => $cascade)
   {
    if (file_exists($view_file.$_ci_file))
    {
     $_ci_path = $view_file.$_ci_file;
     $file_exists = TRUE;
     休息;
    }
    if ( !$cascade)
    {
     休息;
    }
   }
  }
                //view文件不存在底部报错
  if ( ! $file_exists && ! file_exists($_ci_path))
  {
   show_error('无法加载请求的文件:'.$_ci_file);
  }
  // 把CI的所有属性都传递给loader,view中$this指的是loader
  $_ci_CI =& get_instance();
  foreach (get_object_vars($_ci_CI) as $_ci_key => $_ci_var)
  {
   if ( !isset($this->$_ci_key))
   {
    $this->$_ci_key =& $_ci_CI->$_ci_key;
   }
  }
  /*
   * 提取并缓存变量
   *
   * 您可以使用专用的 $this->load_vars()
设置变量    * 函数或通过该函数的第二个参数。我们会合并
   * 这两种类型并缓存它们,以便嵌入
中的视图   * 其他视图可以访问这些变量。
   */
  if (is_array($_ci_vars))
  {
   $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);
  }
  提取($this->_ci_cached_vars);
  /*
   * 将视图内容放置存储区
   *
   */
  ob_start();
  //支持短标签
  if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE)
  {
   echo eval('?>'.preg_replace("/;*s*?>/", "; ?>", str_replace('=', '   }
  其他
  {
   包括($_ci_path); // include() 与 include_once() 允许多个同名视图
  }
  log_message('debug', '文件已加载:'.$_ci_path);
  // 是否直接返回viewdata
  if ($_ci_return === TRUE)
  {
   $buffer = ob_get_contents();
   @ob_end_clean();
   返回 $buffer;
  }
  //当前这个视图文件是被另一个视图文件通过$this->view()方法引入,即视图文件嵌入视图文件
  if (ob_get_level() > $this->_ci_ob_level 1)
  {
   ob_end_flush();
  }
  其他
  {       //// 将秋天的内容休眠输出组件并清空关闭秋天。
   $_ci_CI->输出->append_output(ob_get_contents());
   @ob_end_clean();
  }
 }
 // ------------------------------------------------ --------------------
 /**
  * 加载类
 */
 受保护函数 _ci_load_class($class, $params = NULL, $object_name = NULL)
 {
  // 去掉.php和端点的/获取的$class就是类名或目录名 类名
  $class = str_replace('.php', '', trim($class, '/'));
  // CI 允许dir/filename 方式
  $subdir = '';
  if (($last_slash = strrpos($class, '/')) !== FALSE)
  {
   // 目录
   $subdir = substr($class, 0, $last_slash 1);
   // 文件名
   $class = substr($class, $last_slash 1);
  }
  // 允许加载的类名首字母大写或全小写
  foreach (array(ucfirst($class), strtolower($class)) as $class)
  {
   $subclass = APPPATH.'libraries/'.$subdir.config_item('subclass_prefix').$class.'.php';
   // 是否是扩展类
   if (file_exists($subclass))
   {
    $baseclass = BASEPATH.'libraries/'.ucfirst($class).'.php';
    if ( !file_exists($baseclass))
    {
     log_message('error', "无法加载请求的类:".$class);
     show_error("无法加载请求的类:".$class);
    }
    // 安全性:该类是否已被之前的调用加载?
    if (in_array($subclass, $this->_ci_loaded_files))
    {
     // 在我们认为这是重复请求之前,让我们看看
     // 如果提供自定义对象名称。  如果是的话,我们会
     // 返回对象的新实例
     if ( !is_null($object_name))
     {
      $CI =& get_instance();
      if ( !isset($CI->$object_name))
      {
       return $this->_ci_init_class($class, config_item('subclass_prefix'), $params, $object_name);
      }
     }
     $is_duplicate = TRUE;
     log_message('debug', $class." 类已经加载。第二次尝试被忽略。");
     返回;
    }
    include_once($baseclass);
    include_once($subclass);
    $this->_ci_loaded_files[] = $subclass;
                                //实例化类
    return $this->_ci_init_class($class, config_item('subclass_prefix'), $params, $object_name);
   }
   // 如果不是扩展,和上面类似
   $is_duplicate = FALSE;
   foreach ($this->_ci_library_paths as $path)
   {
    $filepath = $path.'libraries/'.$subdir.$class.'.php';
    // 文件是否存在?  不?  真糟糕...
    if ( ! file_exists($filepath))
    {
     继续;
    }
    // 安全性:该类是否已被之前的调用加载?
    if (in_array($filepath, $this->_ci_loaded_files))
    {
     // 在我们认为这是重复请求之前,让我们看看
     // 如果提供自定义对象名称。  如果是的话,我们会
     // 返回对象的新实例
     if ( !is_null($object_name))
     {
      $CI =& get_instance();
      if ( !isset($CI->$object_name))
      {
       return $this->_ci_init_class($class, '', $params, $object_name);
      }
     }
     $is_duplicate = TRUE;
     log_message('debug', $class." 类已经加载。第二次尝试被忽略。");
     返回;
    }
    include_once($文件路径);
    $this->_ci_loaded_files[] = $filepath;
    return $this->_ci_init_class($class, '', $params, $object_name);
   }
  } // 结束 FOREACH
  // 如果还没有找到该类,最后的尝试是该类会不会在同名的子目录下
  if ($subdir == '')
  {
   $path = strtolower($class).'/'.$class;
   返回 $this->_ci_load_class($path, $params);
  }
  // 加载失败,报错
  if ($is_duplicate == FALSE)
  {
   log_message('error', "无法加载请求的类:".$class);
   show_error("无法加载请求的类:".$class);
  }
 }
 // ------------------------------------------------ --------------------
 /**
  * 实例化已经加载的类
 */
 受保护函数 _ci_init_class($class, $prefix = '', $config = FALSE, $object_name = NULL)
 {
  // 是否有类的配置信息
  if ($config === NULL)
  {
   // 获取包含任何包路径的配置路径
   $config_component = $this->_ci_get_component('config');
   if (is_array($config_component->_config_paths))
   {
    // 在第一个找到的文件上中断,从而打包文件
    // 不会被默认路径覆盖
    foreach ($config_component->_config_paths as $path)
    {
     // 我们测试大写和小写,对于
的服务器      // 文件名区分大小写。检查环境
     // 首先,全局下一个
     if (define('ENVIRONMENT') AND file_exists($path .'config/'.ENVIRONMENT.'/'.strtolower($class).'.php'))
     {
      include($path .'config/'.ENVIRONMENT.'/'.strtolower($class).'.php');
      休息;
     }
     elseif (已定义('ENVIRONMENT') AND file_exists($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php'))
     {
      include($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php');
      休息;
     }
     elseif (file_exists($path .'config/'.strtolower($class).'.php'))
     {
      include($path .'config/'.strtolower($class).'.php');
      休息;
     }
     elseif (file_exists($path .'config/'.ucfirst(strtolower($class)).'.php'))
     {
      include($path .'config/'.ucfirst(strtolower($class)).'.php');
      休息;
     }
    }
   }
  }
  if ($prefix == '')
  {       //系统下库
   if (class_exists('CI_'.$class))
   {
    $name = 'CI_'.$class;
   }
   elseif (class_exists(config_item('subclass_prefix').$class))
   {       //扩展库
    $name = config_item('subclass_prefix').$class;
   }
   其他
   {
    $name = $class;
   }
  }
  其他
  {
   $name = $prefix.$class;
  }
  // 类名有效吗?
  if ( !class_exists($name))
  {
   log_message('error', "不存在的类: ".$name);
   show_error("不存在的类:".$class);
  }
  // 设置变量名称,我们将把类分配给
  // 是否提供了自定义类名?  如果是的话我们就用它
  $class = strtolower($class);
  if (is_null($object_name))
  {
   $classvar = (!isset($this->_ci_varmap[$class])) ? $class : $this->_ci_varmap[$class];
  }
  其他
  {
   $classvar = $object_name;
  }
  // 保存类名和对象名
  $this->_ci_classes[$class] = $classvar;
  // 将初始化类的实例给CI超级句柄
  $CI =& get_instance();
  if ($config !== NULL)
  {
   $CI->$classvar = new $name($config);
  }
  其他
  {
   $CI->$classvar = new $name;
  }
 }
 // ------------------------------------------------ --------------------
 /**
  * 自动加载器
         *
         * autoload.php配置的自动加载文件有:
         *  | 1. Packages
            | 2. Libraries
            | 3. Helper files
            | 4. Custom config files
            | 5. Language files
            | 6. Models
 */
 私有函数_ci_autoloader()
 {
  if (define('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/autoload.php'))
  {
   include(APPPATH.'config/'.ENVIRONMENT.'/autoload.php');
  }
  其他
  {
   include(APPPATH.'config/autoload.php');
  }
  if ( !isset($autoload))
  {
   返回FALSE;
  }
  //自动加载packages,将package_path加入library,model,helper,config
  if (isset($autoload['packages']))
  {
   foreach ($autoload['packages'] as $package_path)
   {
    $this->add_package_path($package_path);
   }
  }
  // 加载配置文件
  if (count($autoload['config']) > 0)
  {
   $CI =& get_instance();
   foreach ($autoload['config'] as $key => $val)
   {
    $CI->config->load($val);
   }
  }
  // 加载助手和语言
  foreach (array('helper', '语言') as $type)
  {
   if (isset($autoload[$type]) AND count($autoload[$type]) > 0)
   {
    $this->$type($autoload[$type]);
   }
  }
  // 这个希望是为了兼容以前版本的
  if ( !isset($autoload['libraries']) AND isset($autoload['core']))
  {
   $autoload['libraries'] = $autoload['core'];
  }
  // 加载库
  if (isset($autoload['libraries']) AND count($autoload['libraries']) > 0)
  {
   // 加载数据库
   if (in_array('database', $autoload['libraries']))
   {
    $this->数据库();
    $autoload['libraries'] = array_diff($autoload['libraries'], array('database'));
   }
   // 加载所有其他库
   foreach ($autoload['libraries'] as $item)
   {
    $this->库($item);
   }
  }
  // 自动加载模型
  if (isset($autoload['model']))
  {
   $this->model($autoload['model']);
  }
 }
 // ------------------------------------------------ --------------------
 /**
  * 返回由对象属性组成的关联数组
 */
 受保护函数 _ci_object_to_array($object)
 {
  返回(is_object($object))? get_object_vars($object) : $object;
 }
 // ------------------------------------------------ --------------------
 /**
  * 获取CI某个组件的实例
 */
 受保护函数 &_ci_get_component($component)
 {
  $CI =& get_instance();
  返回 $CI->$component;
 }
 // ------------------------------------------------ --------------------
 /**
  * 处理文件名,这个函数主要是返回正确文件名
 */
 受保护函数 _ci_prep_filename($filename, $extension)
 {
  if ( !is_array($filename))
  {
   return array(strtolower(str_replace('.php', '', str_replace($extension, '', $filename)).$extension));
  }
  其他
  {
   foreach ($filename as $key => $val)
   {
    $filename[$key] = strtolower(str_replace('.php', '', str_replace($extension, '', $val)).$extension);
   }
   返回$文件名;
  }
 }
}

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!