load->library()$this->load->view()$this->load->model()$this->load->database()$this->load->helper()$this->load->config()$this->load->add_package_pa" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

*CI框架裝載器Loader.php源碼分析

系統 2732 0

http://www.bitscn.com/pdb/php/201411/404680.html

顧名思義,裝載器就是加載元素的,使用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, 0, $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 = '', $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;
?}
?// --------------------------------------------------------------------
?/**
? * 剔除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, 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)));
?}
?// --------------------------------------------------------------------
?/**
? * 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, $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', "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'), $params, $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, config_item('subclass_prefix'), $params, $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, $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, '', $params, $object_name);
??????}
?????}
?????$is_duplicate = TRUE;
?????log_message('debug', $class." class already loaded. Second attempt ignored.");
?????return;
????}
????include_once($filepath);
????$this->_ci_loaded_files[] = $filepath;
????return $this->_ci_init_class($class, '', $params, $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,model,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', '', str_replace($extension, '', $val)).$extension);
???}
???return $filename;
??}
?}
}

*CI框架裝載器Loader.php源碼分析


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品久久新婚兰兰 | 亚洲自拍激情 | 久久综合九色综合狠狠97 | 欧美激情_区二区三区 | 亚洲短视频在线观看 | 国产福利在线观看永久视频 | 国内精品一区视频在线播放 | 久久久高清国产999尤物 | 亚洲日本久久久午夜精品 | 牛牛影视成人午夜影视 | 国产色婷婷精品综合在线观看 | 99久久99久久久精品齐齐鬼色 | 99久久影视 | 中文字幕在线视频不卡 | 日韩成人国产精品视频 | 国产精品久久久久不卡绿巨人 | 国内精品免费一区二区观看 | 成人区精品一区二区不卡亚洲 | www男女| 欧美亚洲国产日韩综合在线播放 | 小说区图片区综合久久亚洲 | 九九久久亚洲综合久久久 | 中文字幕视频在线观看 | 97综合| 久久久国产这里有的是精品 | 亚洲日本在线观看 | 亚洲精品日韩在线一区 | 中文字幕欧美一区 | 日日夜夜伊人 | 国产精品视频分类一区 | 九九碰 | 奇米影视88888 | 精品国产乱码一区二区三区 | 成人精品一区二区不卡视频 | 日韩一区二区在线免费观看 | 91成人在线视频 | 中文字幕视频不卡 | 国产亚洲精品久久久久久午夜 | 91国视频 | 伊色综合久久之综合久久 | 国产大学生一级毛片绿象 |