深入理解CI框架:框架如何运转起来(原理篇)
说明:没特别指明的情况下,本文涉及的Codeigniter均为3.1.2版。
##一、核心
###index.php:入口文件
入口文件主要定义路径和环境,包括BASEPATH
、FCPATH
、APPPATH
等常量表示的路径和application
、system
等变量表示的路径;
index.php
通过$_SERVER['CI_ENV']
来分辨当前的执行环境,目前支持development
、testing
、production
三种(默认development
),如果你在apache
里配置CI_ENV
为其他值(比如mytest),项目会输出错误信息并停止执行;
###core/CodeIgniter.php:分派请求CodeIgniter.php
加载了各种各样的类和方法,它解析用户的请求(URI类
),判断请求对应哪个控制器的哪个方法(Router类
),创建控制器对象,执行方法,得到结果并输出(Output类
),期间还会加载并执行预先设置好的各种钩子(Hooks类
)。
- 很显然,
CodeIgniter.php
是CI框架最重要的文件之一,它根据用户请求调用不同类处理并输出结果。- CI框架解析用户请求,判断对应哪个控制器哪个方法时,主要依据
$_SERVER
这个变量($_SERVER['REQUEST_METHOD']
等)- 除了各种类,
CodeIgniter.php
还加载了很多公共方法,详见core/Common.php
和core/compat
##二、提取核心代码
1 | $RTR =& load_class('Router', 'core'); |
##三、细枝末节
###core/Common.php:公共方法Common Functions
——这是Common.php
定位,用来存放各种公共方法,比如is_php
、is_https
、is_cli
、show_404
、function_usable
等等。
core/compat
目录下也存放有很多公共方法文件,比如hash.php
、mbstring.php
、password.php
、standard.php
,我们经常用的array_column
函数就是在standard.php
里定义的。
##四、黑科技
###extract:从数组中将变量导入到当前的符号表
1 | //index.php |
###ob_xxx函数:把输出放到缓冲区、从缓冲区获取内容
ob_start:打开输出控制缓冲
ob_end_flush:冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_clean:清空(擦除)缓冲区并关闭输出缓冲
1 | //index2.php |
###ReflectionMethod:反射类
1 | //检查方法是否可以访问 |
完。