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

本文详细解析了CodeIgniter框架的index.php文件与CodeIgniter.php之间的差异,重点介绍了CodeIgniter.php如何加载并执行框架的核心操作,包括加载类库、解析URL等。通过分析,揭示了CI_Controller超级对象的生成及其在框架中的作用,帮助读者深入理解CodeIgniter的URL映射机制。
摘要由CSDN通过智能技术生成

与 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 打印出来的对象竟然包含那么多东西了吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>