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

[已解决] 求助,ci_controller这个超级类的作用仅仅是自动load类库?

[复制链接]
发表于 2012-4-6 17:38:55 | 显示全部楼层 |阅读模式
统一入口index的时候好像仅仅是实例化了通过格式化uri的class method,但是所有的class也就是控制器都是集成ci的超级类CI_Controller,但是这个超级类提供给的方法就只有一个 &get_instance()以及在构造函数的手定义$instance 以及处理auto_load(),和实力loader类外,好像就没有什么特别的地方了啊?
还有我想不明白is_loaded()这个是那个类的方法的....
发表于 2012-4-6 17:55:00 | 显示全部楼层
不太明白你的问题是什么?
如果对 CI 源码感兴趣,可以看看论坛里的源码分析,有很多篇文章。
发表于 2012-4-7 10:15:14 | 显示全部楼层
首先 is_loaded()方法是定义在  BATHPATH/core/common.php 中的全局方法。

在全局方法中还有一个 load_class 的全局方法。这个方法是加载类库使用的。在这个方法中每实例化一个类库,都会调用is_loaded()方法,记录加载的类。
你看common.php的源码,is_loaded的方法中定义了一个静态数组,所有加载的类都会记录到里面。你可以在CI_Controller的超级类中打印一下这个数组。print_r(is_loaded());你就明白了。

至于在超级类中自动加载核心类库。这是必须的,因为你所有的controller运行都需要核心类库的支持。这样你自定义的controller就不需要二次加载了。

别的不多说了。至于&get_instance ()
调用get_instance()这么做几乎不消耗资源,因为每次返回的都是一个引用

      CI的CI_Controller类用的是单例模式。不管你怎么调用 & get_instance(),系统只有一个实例,不会重复实例化

本版积分规则