• CodeIgniter index.php原本框架执行顺序

    流程大致一样
    服务器君一共花费 20.136 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    与 CodeIgniter 的 index.php 的差异

    前面一小节的 index.php 是我自己按着 CodeIgniter 的框架思路写的,与 CodeIgniter 自己的 index.php 有差异。

    CodeIgniter index.php 在末尾加了一句:

    require_once BASEPATH.'core/CodeIgniter.php';
    

    CodeIgniter.php 加载需要的类库,CI框架所有操作都在这里执行。

    再来 CodeIgniter.php:

    require(BASEPATH.'core/Common.php');
    
    // Common.php主要是load_class()加载各种所需的类库
    // 比如加载配置文件类什么的 
    $CFG =& load_class('Config', 'core');
    $URI =& load_class('URI', 'core');
    $RTR =& load_class('Router', 'core');
    $RTR->_set_routing();
    $SEC =& load_class('Security', 'core');
    $IN	=& load_class('Input', 'core');
    
    require BASEPATH.'core/Controller.php';
    function &get_instance()
    {
    	return CI_Controller::get_instance();
    }
    
    // 从$RTR类解析出URL的 class 名与 method 名
    $class  = $RTR->fetch_class();
    $method = $RTR->fetch_method();
    
    call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
    

    在上面的 CodeIgniter.php 里面加载了 Controller.php 这个控制器超级类:

    class CI_Controller {
    
    	private static $instance;
    
    	/**
    	 * Constructor
    	 */
    	public function __construct()
    	{
    		self::$instance =& $this;
    		
    		// 分配引导文件中所有被实例化的类对象到当前对象属性中
    		// 因此,CI程序能把这些属性当成超级对象来使用
    		// 意味着我们所写的控制器只要继承CI_Controller,就可以使用所有加载的类(方法、属性)。
    		foreach (is_loaded() as $var => $class)
    		{
    			$this->$var =& load_class($class);
    		}
    
    		$this->load =& load_class('Loader', 'core');
    
    		$this->load->initialize();
    		
    		log_message('debug', "Controller Class Initialized");
    	}
    
    	public static function &get_instance()
    	{
    		return self::$instance;
    	}
    }
    

    也就是说,通过 $CI = new $class(); (即 CI_Controller::get_instance();) 产生的对象,都是超级对象,只要加载了的类,在这个对象中都能使用它们的方法。现在你知道,为啥在 从index.php开始看CodeIgniter的URL映射 这篇文章末尾,将 $CI 打印出来的对象竟然包含那么多东西了吧。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] Django Web环境配置 2 个条目
  2. [移动开发] ListView 使用相关问题集 1 个条目
  3. [Python程序设计] Django模板系统 11 个条目
  4. [数据库技术] SQL基础语法 1 个条目
  5. [Python程序设计] Tornado 服务器环境配置 3 个条目
  6. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
  7. [智力开发与知识管理] 超越整体性学习 5 个条目
  8. [C语言程序设计] C语言里的全局变量 2 个条目
  9. [Python程序设计] Tornado源码解析 23 个条目
  10. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  11. [JavaScript程序设计] jQuery与表单操作 2 个条目
  12. [智力开发与知识管理] 整体性学习步骤 9 个条目
窗口 -- [博客]