用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1414|回复: 3
收起左侧

[讨论/交流] CI框架分析,新人一天学习结果

[复制链接]
发表于 2016-5-3 15:21:55 | 显示全部楼层 |阅读模式
看了一天的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文件中

评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2016-5-4 08:59:54 | 显示全部楼层
网上有CI源码分析的,可以搜搜,但不是3.0的,但是大同小异
发表于 2016-5-17 21:24:45 | 显示全部楼层
一天就看了这么多,好厉害

本版积分规则