加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 02:07:41 所属栏目:PHP教程 来源:网络整理
导读:《PHP实战:CI框架装载器Loader.php源码分析》要点: 本文介绍了PHP实战:CI框架装载器Loader.php源码分析,希望对您有用。如果有疑问,可以联系我们。 PHP学习 顾名思义,装载器就是加载元素的,使用CI时,经常加载的有: $this-load-library() $this-load-vie

《PHP实战:CI框架装载器Loader.php源码分析》要点:
本文介绍了PHP实战:CI框架装载器Loader.php源码分析,希望对您有用。如果有疑问,可以联系我们。

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就无比强大了
?*/
class CI_Loader {
?protected $_ci_ob_level;
?protected $_ci_view_paths??= array();
?protected $_ci_library_paths?= array();
?protected $_ci_model_paths??= array();
?protected $_ci_helper_paths??= array();
?protected $_base_classes??= array(); // Set by the controller class
?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' => 'agent');
?public function __construct()
?{??????
??????????????? //获取缓冲嵌套级别
??$this->_ci_ob_level? = ob_get_level();
??//library路径
??????????????? $this->_ci_library_paths = array(APPPATH,BASEPATH);
??????????????? //helper路径
??$this->_ci_helper_paths = array(APPPATH,BASEPATH);
??????????????? //model路径
??$this->_ci_model_paths = array(APPPATH);
??????????????? //view路径
??$this->_ci_view_paths = array(APPPATH.'views/'?=> TRUE);
??log_message('debug',"Loader Class Initialized");
?}
?// --------------------------------------------------------------------
?/**
? * 初始化Loader
? *
? */
?public function 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();
??return $this;
?}
?// --------------------------------------------------------------------
?/**
? * 检测类是否加载
? */
?public function is_loaded($class)
?{
??if (isset($this->_ci_classes[$class]))
??{
???return $this->_ci_classes[$class];
??}
??return FALSE;
?}
?// --------------------------------------------------------------------
?/**
? * 加载Class
? */
?public function library($library = '',$params = NULL,$object_name = NULL)
?{
??if (is_array($library))
??{
???foreach ($library as $class)
???{
????$this->library($class,$params);
???}
???return;
??}
??????????????? //如果$library为空或者已经加载...
??if ($library == '' OR isset($this->_base_classes[$library]))
??{
???return FALSE;
??}
??if ( ! is_null($params) && ! is_array($params))
??{
???$params = NULL;
??}
??$this->_ci_load_class($library,$params,$object_name);
?}
?// --------------------------------------------------------------------
?/**
? * 加载和实例化model
? */
?public function model($model,$name = '',$db_conn = FALSE)
?{
??????????????? //CI支持数组加载多个model
??if (is_array($model))
??{
???foreach ($model as $babe)
???{
????$this->model($babe);
???}
???return;
??}
??if ($model == '')
??{
???return;
??}
??$path = '';
??// 是否存在子目录
??if (($last_slash = strrpos($model,'/')) !== FALSE)
??{
???// The path is in front of the last slash
???$path = substr($model,$last_slash + 1);
???// And the model name behind it
???$model = substr($model,$last_slash + 1);
??}
??if ($name == '')
??{
???$name = $model;
??}
??if (in_array($name,$this->_ci_models,TRUE))
??{
???return;
??}
??$CI =& get_instance();
??if (isset($CI->$name))
??{
???show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
??}
??$model = strtolower($model); //model文件名全小写
??foreach ($this->_ci_model_paths as $mod_path)
??{
???if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
???{
????continue;
???}
???if ($db_conn !== FALSE AND ! class_exists('CI_DB'))
???{
????if ($db_conn === TRUE)
????{
?????$db_conn = '';
????}
????$CI->load->database($db_conn,FALSE,TRUE);
???}
???if ( ! class_exists('CI_Model'))
???{
????load_class('Model','core');
???}
???require_once($mod_path.'models/'.$path.$model.'.php');
???$model = ucfirst($model);
???$CI->$name = new $model();
??????????????????????? //保存在Loader::_ci_models中,以后可以用它来判断某个model是否已经加载过.
???$this->_ci_models[] = $name;
???return;
??}
??// couldn't find the model
??show_error('Unable to locate the model you have specified: '.$model);
?}
?// --------------------------------------------------------------------
?/**
? * 数据库Loader
? */
?public function database($params = '',$return = FALSE,$active_record = NULL)
?{
??// Grab the super object
??$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))
??{
???return FALSE;
??}
??require_once(BASEPATH.'database/DB.php');
??if ($return === TRUE)
??{
???return DB($params,$active_record);
??}
??// Initialize the db variable.? Needed to prevent
??// reference errors with some configurations
??$CI->db = '';
??// Load the DB class
??$CI->db =& DB($params,$active_record);
?}
?// --------------------------------------------------------------------
?/**
? * 加载数据库工具类
? */
?public function dbutil()
?{
??if ( ! class_exists('CI_DB'))
??{
???$this->database();
??}
??$CI =& get_instance();
??// for backwards compatibility,load dbforge so we can extend dbutils off it
??// this use is deprecated and strongly discouraged
??$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();
?}
?// --------------------------------------------------------------------
?/**
? * Load the Database Forge Class
? *
? * @return?string
? */
?public function dbforge()
?{
??if ( ! class_exists('CI_DB'))
??{
???$this->database();
??}
??$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();
?}
?// --------------------------------------------------------------------
?/**
? * 加载视图文件
? */
?public function 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));
?}
?// --------------------------------------------------------------------
?/**
? * 加载普通文件
? */
?public function file($path,$return = FALSE)
?{
??return $this->_ci_load(array('_ci_path' => $path,'_ci_return' => $return));
?}
?// --------------------------------------------------------------------
?/**
? * 设置变量
? *
? * Once variables are set they become available within
? * the controller class and its "view" files.
? *
? */
?public function 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;
???}
??}
?}
?// --------------------------------------------------------------------
?/**
? * 检查并获取变量
? */
?public function get_var($key)
?{
??return isset($this->_ci_cached_vars[$key]) ? $this->_ci_cached_vars[$key] : NULL;
?}
?// --------------------------------------------------------------------
?/**
? * 加载helper
? */
?public function helper($helpers = array())
?{
??foreach ($this->_ci_prep_filename($helpers,'_helper') as $helper)
??{
???if (isset($this->_ci_helpers[$helper]))
???{
????continue;
???}
???$ext_helper = APPPATH.'helpers/'.config_item('subclass_prefix').$helper.'.php';
???// 如果是扩展helper的话
???if (file_exists($ext_helper))
???{
????$base_helper = BASEPATH.'helpers/'.$helper.'.php';
????if ( ! file_exists($base_helper))
????{
?????show_error('Unable to load the requested file: helpers/'.$helper.'.php');
????}
????include_once($ext_helper);
????include_once($base_helper);
????$this->_ci_helpers[$helper] = TRUE;
????log_message('debug','Helper loaded: '.$helper);
????continue;
???}
???// 如果不是扩展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 loaded: '.$helper);
?????break;
????}
???}
???// 如果该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 = '',$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,$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;
?}
?// --------------------------------------------------------------------
?/**
? * 剔除Package Path
? *
? * Remove a path from the library,model,and helper path arrays if it exists
? * If no path is provided,the most recently added path is removed.
? *
? */
?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);
??}
??else
??{
???$path = rtrim($path,'/').'/';
???foreach (array('_ci_library_paths','_ci_model_paths','_ci_helper_paths') as $var)
???{
????if (($key = array_search($path,$this->{$var})) !== FALSE)
????{
?????unset($this->{$var}[$key]);
????}
???}
???if (isset($this->_ci_view_paths[$path.'views/']))
???{
????unset($this->_ci_view_paths[$path.'views/']);
???}
???if (($key = array_search($path,$config->_config_paths)) !== FALSE)
???{
????unset($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,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)));
?}
?// --------------------------------------------------------------------
?/**
? * Loader
? *
? * This function is used to load views and files.
? * Variables are prefixed with _ci_ to avoid symbol collision with
? * variables made available to view files
? *
? * @param?array
? * @return?void
? */
?protected function _ci_load($_ci_data)
?{
??// Set the default data variables
??foreach (array('_ci_view','_ci_vars','_ci_path','_ci_return') as $_ci_val)
??{
???$$_ci_val = ( ! isset($_ci_data[$_ci_val])) ? FALSE : $_ci_data[$_ci_val];
??}
??$file_exists = FALSE;
??????????????? //如果$_ci_path不为空,则说明当前要加载普通文件.Loader::file才会有path
??if ($_ci_path != '')
??{
???$_ci_x = explode('/',$_ci_path);
???$_ci_file = end($_ci_x);
??}
??else
??{
???$_ci_ext = pathinfo($_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;
?????break;
????}
????if ( ! $cascade)
????{
?????break;
????}
???}
??}
??????????????? //view文件不存在则会报错
??if ( ! $file_exists && ! file_exists($_ci_path))
??{
???show_error('Unable to load the requested file: '.$_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;
???}
??}
??/*
?? * Extract and cache variables
?? *
?? * You can either set variables using the dedicated $this->load_vars()
?? * function or via the second parameter of this function. We'll merge
?? * the two types and cache them so that views that are embedded within
?? * other views can have access to these variables.
?? */
??if (is_array($_ci_vars))
??{
???$this->_ci_cached_vars = array_merge($this->_ci_cached_vars,$_ci_vars);
??}
??extract($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('<?=','<?php echo ',file_get_contents($_ci_path))));
??}
??else
??{
???include($_ci_path); // include() vs include_once() allows for multiple views with the same name
??}
??log_message('debug','File loaded: '.$_ci_path);
??// 是否直接返回view数据
??if ($_ci_return === TRUE)
??{
???$buffer = ob_get_contents();
???@ob_end_clean();
???return $buffer;
??}
??//当前这个视图文件是被另一个视图文件通过$this->view()方法引入,即视图文件嵌入视图文件
??if (ob_get_level() > $this->_ci_ob_level + 1)
??{
???ob_end_flush();
??}
??else
??{?????? ////把缓冲区的内容交给Output组件并清空关闭缓冲区.
???$_ci_CI->output->append_output(ob_get_contents());
???@ob_end_clean();
??}
?}
?// --------------------------------------------------------------------
?/**
? * 加载类
? */
?protected function _ci_load_class($class,$object_name = NULL)
?{
??// 去掉.php和两端的/获取的$class就是类名或目录名+类名
??$class = str_replace('.php','',trim($class,'/'));
??// CI允许dir/filename方式
??$subdir = '';
??if (($last_slash = strrpos($class,'/')) !== FALSE)
??{
???// 目录
???$subdir = substr($class,$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',"Unable to load the requested class: ".$class);
?????show_error("Unable to load the requested class: ".$class);
????}
????// Safety:? Was the class already loaded by a previous call?
????if (in_array($subclass,$this->_ci_loaded_files))
????{
?????// Before we deem this to be a duplicate request,let's see
?????// if a custom object name is being supplied.? If so,we'll
?????// return a new instance of the object
?????if ( ! is_null($object_name))
?????{
??????$CI =& get_instance();
??????if ( ! isset($CI->$object_name))
??????{
???????return $this->_ci_init_class($class,config_item('subclass_prefix'),$object_name);
??????}
?????}
?????$is_duplicate = TRUE;
?????log_message('debug',$class." class already loaded. Second attempt ignored.");
?????return;
????}
????include_once($baseclass);
????include_once($subclass);
????$this->_ci_loaded_files[] = $subclass;
??????????????????????????????? //实例化类
????return $this->_ci_init_class($class,$object_name);
???}
???// 如果不是扩展,和上面类似
???$is_duplicate = FALSE;
???foreach ($this->_ci_library_paths as $path)
???{
????$filepath = $path.'libraries/'.$subdir.$class.'.php';
????// Does the file exist?? No?? Bummer...
????if ( ! file_exists($filepath))
????{
?????continue;
????}
????// Safety:? Was the class already loaded by a previous call?
????if (in_array($filepath,$class." class already loaded. Second attempt ignored.");
?????return;
????}
????include_once($filepath);
????$this->_ci_loaded_files[] = $filepath;
????return $this->_ci_init_class($class,$object_name);
???}
??} // END FOREACH
??// 如果还没有找到该class,最后的尝试是该class会不会在同名的子目录下
??if ($subdir == '')
??{
???$path = strtolower($class).'/'.$class;
???return $this->_ci_load_class($path,$params);
??}
??// 加载失败,报错
??if ($is_duplicate == FALSE)
??{
???log_message('error',"Unable to load the requested class: ".$class);
???show_error("Unable to load the requested class: ".$class);
??}
?}
?// --------------------------------------------------------------------
?/**
? * 实例化已经加载的类
? */
?protected function _ci_init_class($class,$prefix = '',$config = FALSE,$object_name = NULL)
?{
??// 是否有类的配置信息
??if ($config === NULL)
??{
???// Fetch the config paths containing any package paths
???$config_component = $this->_ci_get_component('config');
???if (is_array($config_component->_config_paths))
???{
????// Break on the first found file,thus package files
????// are not overridden by default paths
????foreach ($config_component->_config_paths as $path)
????{
?????// We test for both uppercase and lowercase,for servers that
?????// are case-sensitive with regard to file names. Check for environment
?????// first,global next
?????if (defined('ENVIRONMENT') AND file_exists($path .'config/'.ENVIRONMENT.'/'.strtolower($class).'.php'))
?????{
??????include($path .'config/'.ENVIRONMENT.'/'.strtolower($class).'.php');
??????break;
?????}
?????elseif (defined('ENVIRONMENT') AND file_exists($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php'))
?????{
??????include($path .'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php');
??????break;
?????}
?????elseif (file_exists($path .'config/'.strtolower($class).'.php'))
?????{
??????include($path .'config/'.strtolower($class).'.php');
??????break;
?????}
?????elseif (file_exists($path .'config/'.ucfirst(strtolower($class)).'.php'))
?????{
??????include($path .'config/'.ucfirst(strtolower($class)).'.php');
??????break;
?????}
????}
???}
??}
??if ($prefix == '')
??{?????? //system下library
???if (class_exists('CI_'.$class))
???{
????$name = 'CI_'.$class;
???}
???elseif (class_exists(config_item('subclass_prefix').$class))
???{?????? //扩展library
????$name = config_item('subclass_prefix').$class;
???}
???else
???{
????$name = $class;
???}
??}
??else
??{
???$name = $prefix.$class;
??}
??// Is the class name valid?
??if ( ! class_exists($name))
??{
???log_message('error',"Non-existent class: ".$name);
???show_error("Non-existent class: ".$class);
??}
??// Set the variable name we will assign the class to
??// Was a custom class name supplied?? If so we'll use it
??$class = strtolower($class);
??if (is_null($object_name))
??{
???$classvar = ( ! isset($this->_ci_varmap[$class])) ? $class : $this->_ci_varmap[$class];
??}
??else
??{
???$classvar = $object_name;
??}
??// Save the class name and object name
??$this->_ci_classes[$class] = $classvar;
??// 将初始化的类的实例给CI超级句柄
??$CI =& get_instance();
??if ($config !== NULL)
??{
???$CI->$classvar = new $name($config);
??}
??else
??{
???$CI->$classvar = new $name;
??}
?}
?// --------------------------------------------------------------------
?/**
? * 自动加载器
???????? *
???????? * autoload.php配置的自动加载文件有:
???????? *? | 1. Packages
??????????? | 2. Libraries
??????????? | 3. Helper files
??????????? | 4. Custom config files
??????????? | 5. Language files
??????????? | 6. Models
? */
?private function _ci_autoloader()
?{
??if (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/autoload.php'))
??{
???include(APPPATH.'config/'.ENVIRONMENT.'/autoload.php');
??}
??else
??{
???include(APPPATH.'config/autoload.php');
??}
??if ( ! isset($autoload))
??{
???return FALSE;
??}
??// 自动加载packages,也就是将package_path加入到library,helper,config
??if (isset($autoload['packages']))
??{
???foreach ($autoload['packages'] as $package_path)
???{
????$this->add_package_path($package_path);
???}
??}
??// 加载config文件
??if (count($autoload['config']) > 0)
??{
???$CI =& get_instance();
???foreach ($autoload['config'] as $key => $val)
???{
????$CI->config->load($val);
???}
??}
??// 加载helper和language
??foreach (array('helper','language') 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'];
??}
??// 加载libraries
??if (isset($autoload['libraries']) AND count($autoload['libraries']) > 0)
??{
???// 加载db
???if (in_array('database',$autoload['libraries']))
???{
????$this->database();
????$autoload['libraries'] = array_diff($autoload['libraries'],array('database'));
???}
???// 加载所有其他libraries
???foreach ($autoload['libraries'] as $item)
???{
????$this->library($item);
???}
??}
??// Autoload models
??if (isset($autoload['model']))
??{
???$this->model($autoload['model']);
??}
?}
?// --------------------------------------------------------------------
?/**
? * 返回由对象属性组成的关联数组
? */
?protected function _ci_object_to_array($object)
?{
??return (is_object($object)) ? get_object_vars($object) : $object;
?}
?// --------------------------------------------------------------------
?/**
? * 获取CI某个组件的实例
? */
?protected function &_ci_get_component($component)
?{
??$CI =& get_instance();
??return $CI->$component;
?}
?// --------------------------------------------------------------------
?/**
? * 处理文件名,这个函数主要是返回正确文件名
? */
?protected function _ci_prep_filename($filename,$extension)
?{
??if ( ! is_array($filename))
??{
???return array(strtolower(str_replace('.php',str_replace($extension,$filename)).$extension));
??}
??else
??{
???foreach ($filename as $key => $val)
???{
????$filename[$key] = strtolower(str_replace('.php',$val)).$extension);
???}
???return $filename;
??}
?}
}

欢迎参与《PHP实战:CI框架装载器Loader.php源码分析》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读