|
看了一天的CI框架源代码,网上下的最新版本,现将成果分享如下,请大家批评指正:
首先进入根目录下的index.php
66行~90行:配置环境,是开发环境,生产环境还是测试环境
100~306行: 检查各种路径的路径是否正确,主要是配置两个路径
$system_path= 'system';
$application_folder= 'application';
315行: 进入文件:system/core/CodeIgniter.php
65行:包含环境相关的配置文件,如果有会在application/config/环境/constant.php
70行:包含配置常量 APPPATH.'config/constants.php
77行:包含通用函数
通用函数中主要有一个加载函数load_class,加载类对象,而且是单例模式
188行: 加载各种类对象,benchmark,ext ,config,utf8,URTI,Router
主要的在类对象URI,Router中会解析出url,通过函数_set_routing函数找到控制器的class名字,和要调用的method名字,主要是通过规定的路径去查找
322行:判断如果缓冲区有数据,就直接显示了,然后退出
355行: 包含文件BASEPATH.'core/Controller.php
其中的CI_Controller类是所有控制器类的父类,构造函数中
foreach (is_loaded() as $var => $class)
{
$this->$var =& load_class($class);
}
这几句代码会把之前加载的所有类的单例模式对象(都为静态成员变量),全部挂载在一个超级全局变量上:
比如加载的Router单例$RTR本身是静态成员变量,外部是没法直接访问的,经过这么挂载后可以这样访问:
$mycontrolObject->Router
$mycontrolObject 是用户自己实例化的一个控制器对象
500行:new出一个需要加载的用户控制器实例
514行:call_user_func_array(array(&$CI, $method), $params);
调用$CI->method 方法
以浏览器默认为例:
class = pages;
method = view;
会调用Pages的view方法:
$this->load->view('templates/header', $data);
$this->load实际上在父类CI_Controller中被构建,指的是一个CI_loader对象,所以
实际上会调用CI_loader的view方法
这个view方法实际上就是加载路径templates/header下的html文件,并显示在浏览器,$data会传递到html文件中 |
评分
-
查看全部评分
|