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

[讨论/交流] CI是如何实现自动加载的呢?

[复制链接]
发表于 2011-6-8 00:50:34 | 显示全部楼层 |阅读模式
我见到很多框架,模板,甚至cms里面这样写
class myclass extends Model{
}
是的,没写错,凭空就继承了Model类。没有include,没有__autoload自动加载,只是找到了一个lib文件夹,文件夹下有个model.sys.php文件,这个文件里只有一个类,叫Model。
想知道这个过程是怎样实现的。
CI里也有很多这种情况,自己建一个类,然后直接$this->load->什么什么就能用了。
这个过程是如何实现的??
还有定义数据库的。
$_db_config["host"] = "localhost";
$_db_config["port"] = "3306";
$_db_config["user"] = "root";
别的地方也没用include或__autoload自动加载,也能用了,怎么实现的啊?
 楼主| 发表于 2011-6-8 05:03:47 | 显示全部楼层
其实是学smarty时用到的这个。
smarty配置文件写好后,
每个文件都要用到include_once("smarty_inc.php");这句话,总不是个事,。
还有数据库连接文件,每个也都要用include或__autoload,说自动加载其实一点不自动,全局变量其实一点不全局。不知道怎么弄了。。。。。。。。。。
发表于 2011-6-8 17:54:59 | 显示全部楼层
CI 是用的静态变量,加指针函数 处理.

个人觉得效果还佳
 楼主| 发表于 2011-6-9 16:53:56 | 显示全部楼层
自己顶一下,求解。
发表于 2011-6-9 18:10:54 | 显示全部楼层
肯定是有 include
因为你访问的入口是 index.php,系统会根据约定和配置,去固定目录下 include 固定文件。
你的控制器也是被别人 include 进来执行的,所以需要的类都已经 include 好了。
如果你直接访问控制器文件,肯定是不行的,因为你没有经过 index.php

如果对 CI 的执行感兴趣,可以看看论坛的 CI 源码分析。
 楼主| 发表于 2011-6-10 07:39:49 | 显示全部楼层
本帖最后由 guanliyang 于 2011-6-10 07:42 编辑

如果版主执意说有的话,能否给个具体位置,。我觉得没有,因为找不到。
他们说,CI跑起来后,一些程序自动执行,.php文件你不访问它,它是怎么自动执行的呢?

而且听说版主也用过phpok吧,。他那个也是,几乎所有MVC模式都是,直接extends Model。直接继承Model类,没include和自动加载。太想知道怎么实现的啦。
发表于 2011-6-10 08:57:24 | 显示全部楼层
建议lz多看看源码 in system/core/Model.php
        function __get($key)
        {
                $CI =& get_instance();
                return $CI->$key;
        }
发表于 2011-6-10 14:13:46 | 显示全部楼层
guanliyang 发表于 2011-6-10 07:39
如果版主执意说有的话,能否给个具体位置,。我觉得没有,因为找不到。
他们说,CI跑起来后,一些程序自动 ...

教程索引:http://codeigniter.org.cn/forums/thread-214-1-1.html
你把这个都看了,你就是 CI 专家,这个置顶帖,置顶好 3 年了。。。。。。

另外,不知道哪本书告诉你的, php 文件必须访问才能执行。
你访问了 index.php 以后,所有代码都可以自动执行,比如你可以执行
PHP复制代码
$a = new Controller();
复制代码
吧?然后
PHP复制代码
$a->index();
复制代码
吧?这样你的控制器的 index 方法不就自动执行了吗?
另外,你可以搜搜 CI 源码,里面很多 include,这就是框架把这些隐藏起来,不用你手动执行,如果让你自己 include,那还是框架吗?
框架是什么?框架就是一个体系,各部件合理配合运行的体系。多想想,呵呵

万变不离其宗,编程就是这样,要多思考,多实践,你会发现,很高深的东西,其实原理很简单。
 楼主| 发表于 2011-6-10 17:00:58 | 显示全部楼层
本帖最后由 guanliyang 于 2011-6-10 17:07 编辑

版主,我喜欢你最后的一句话,。
可是......我只想知道,没有include和自动加载,如何extends 一个类而不报错。
只是这样而已。
发表于 2011-6-10 17:44:59 | 显示全部楼层
guanliyang 发表于 2011-6-10 17:00
版主,我喜欢你最后的一句话,。
可是......我只想知道,没有include和自动加载,如何extends 一个类而不 ...

我觉得你去看看源代码,什么疑问都解除了

本版积分规则