CodeIgniter是一款现在很流行的php框架,小巧高效且易用。下面就其核心的流程进行一个解析,先看下段代码,为简单起见,下面的程序是放在一个文件中的。
- class Obj
- {
- // 静态成员,用以保存当前类的实例
- private static $instance;
- // 构造函数中完成了loader对象的加载
- public function __construct()
- {
- self::$instance = $this;// 保存了当前类的实例
- $this->load = new Loader();
- }
- // 静态方法返回类的实例
- public static function app()
- {
- return self::$instance;
- }
- }
- class Loader
- {
- // 库加载方法,最核心的部分
- public function library($class_name)
- {
- // 动态的实例化类,并将实例存放到Obj对象的成员中,该成员也是动态创建的
- Obj::app()->$class_name = new $class_name();
- }
- }
- // ------------------------------------------------------------------
- // 测试
- // Test类可以看作是视图层
- class Test
- {
- public function display()
- {
- echo "run display";
- }
- }
- // APP可以看为是控制器层
- class APP extends Obj
- {
- public function run()
- {
- // 加载Test类后调用Test类的display方法。
- // 实际上,所有的类的调用方式都是一致的,都是先加载,再用对应的名取得对象
- $this->load->library('Test');
- $this->Test->display();
- }
- }
- // ------------------------------------------------------------------
- // 执行
- $APP = new APP();
- $APP->run();
输出结果:
- run display
第26行是整个框架中最核心的一行。充分的利用了php可以动态创建类成员的这一特性,将类的实例“注入”到Obj对象中,完成了调用方式的统一,简洁明快且适用性极广。
转载于:https://blog.51cto.com/ustb80/1031958