CodeIgniter源码分析 第二弹

来源:互联网 发布:cfda官网 数据核查 编辑:程序博客网 时间:2024/06/09 18:46

CodeIgniter的文件结构与加载机制分析

System

core        核心文件
database    数据库驱动
fonts       应该是在生成验证码的时候会用上,基本上不用,不用深究
helpers     系统封装的函数
language    语言包放置位置,除了在做多语言系统的情况也用不上
liararies   系统封装的类库

application

cache           存储CodeIgniter生成的缓存文件
config          放置配置文件
controller      放置MVC中的控制器
core            放置应用程序核心文件
errors          放置错误显示文件
helpers         放置应用程序函数
hooks           放置Hook文件
language        放置语言包
libraries       放置应用程序类库,可自定义
logs            放置日志文件
models          放置数据库模型文件
third_party     放置第三方组件
views           放置视图文件
.htacess        用于Apache的URL重写功能

Codeigniter应用类库和辅助函数的使用方式

$this->load->helper('array')或$this->load->library('cart')或$this->load->view('name')或$this->load->model('blog/queries');
   $this->load是实例化的Loader类
   helper是加载辅助函数的方法
   library是加载类库的方法
   view是加载视图的方法
   model是加载模型的方法
   参数为函数文件名。
   在Loader类文件的构造函数中有如下代码:
    $this->_ci_library_paths = array(APPPATH, BASEPATH);
    $this->_ci_helper_paths = array(APPPATH, BASEPATH);
    $this->_ci_model_paths = array(APPPATH);
    $this->_ci_view_paths = array(APPPATH.'views/' => TRUE);
   加载类在实例化时已经包含了所有正确放置对应文件的文件夹地址。根据文件名加载,如果在文件夹中存在就包含相应的文件,不存在就报错。


在CodeIgniter.php中
有很多类似于$EXT =& load_class('Hooks', 'core');的代码。
在Controller.php中也一段代码:
$this->$var =& load_class($class);
而在Common.php中Load_class的实现代码为:
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
{
        代码略....
}
load_class先是判断是否加载这个文件,如果加载过就不再加载。对于一个控制器而言,实例化后的对象都指向同一位置,有点类似与单例模式,不会造成内存资源的浪费。


如果要自定义辅助函数或自定义类库,就可以直接将写好的函数或类库文件保存在应用程序相应的文件夹中。
0 0