|
原文地址: http://www.mycode114.com/archives/138
前言
其实我比较反感使用框架的。因为它为了大家实现各种项目个性化的使用,做了很多扩展性的设计。有很多二次开发的机制,同一个操作设计出不同的实现方案。
但如果整个项目都是自己在把握的话,这些机制就是没有必要的。但又不得不承认,它给开发带来了很多便利。 你可以少写很多的基础代码,自带的类库。也可以让你省不少事。
我觉得PHPCMS V9那种文件目录存放方式已经很好了。CI号称最小内核之一,呵呵。
那我扣出PHPCMS V9那个内核机制,可以不用之一了.,咳咳,又不谦虚了,低调,低调。
不过既然项目用CI,那我就好好学习学习。还是会吸收不少新的东西。 CI框架就如同它自己号称的一样,不是很大,看明白就行了,写出来也是重复的。但还是写出来吧, 向作者致敬,为CI社区作贡献。
水平有限,难免理解错误,怡笑大方--!
进入正题:
加载了哪些文件
前面不多说,CI都有注释。是定义文件目录路径的变量和常量。
最后一句:
PHP复制代码 require_once BASEPATH.'core/CodeIgniter.php'; 复制代码
通过上面的代码,加载了system/core/CodeIgniter.php
在CodeIgniter.php中加载了控制器
PHP复制代码 // Load the base controller class
require BASEPATH.'core/Controller.php'; 复制代码
控制器类Controller的构造函数加载了,公共要加载的类文件.
PHP复制代码 public function __construct()
{
self::$instance =& $this;
// Assign all the class objects that were instantiated by the
// bootstrap file (CodeIgniter.php) to local class variables
// so that CI can run as one big super object.
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");
} 复制代码
foreach的上面的注释说得很清楚.注册的对象已经被框架入口文件以变量的方式实例化了,
所以CI能运行一个超级大对象.
至于怎么用$this对象, 对象是如何被注册的.不在本文分析之列.
我们只需要将is_loaded打印出来, 其实也就是那个$class变量
看看里面有什么
- Array
- (
- [benchmark] => Benchmark
- [hooks] => Hooks
- [config] => Config
- [utf8] => Utf8
- [uri] => URI
- [router] => Router
- [output] => Output
- [security] => Security
- [input] => Input
- [lang] => Lang
- )
复制代码
上面都是通过foreach循环加载的, core/loader.php是单独加载的,并且调用它的initialize()方法.
PHP复制代码 $this->load =& load_class('Loader', 'core'); 复制代码
load_class是CI的神经中枢, 它会按Codeigniter框架设计的加载类和函数的优先级去加载函数和类.
所以框架总共加载了以上11个类文件, 顺便说一名PHPCMS BASE默认加载3个类来控制路路由和调度,它的内核只有这三个类.
如果要想知道别人的代码,加载了哪些类和函数,就在system/core/Common.php的load_class方法里把$_classes打印出来.
它里面包含了你可以用的全部信息:
例如:
|
评分
-
查看全部评分
|