CI生命周期

CodeIgniter 的生命周期
        index.php        system/core/CodeIgniter.php
                CI 的生命周期,两个文件就表达清楚了,php 的执行始于 index.php,终于 core/CodeIgniter.php。前面提到的超级对象,只是 core/CodeIgniter.php 的一个环节生成、使用的。

        index.php
                各种配置、参数定义
                        没有什么业务逻辑,主要是初始化
                        设置运行环境 product、development 或者 development
                        为了安全,可以将 system 和 application 目录转移到其他位置
       
                               
                 include system/core/CodeIgniter.php
                        末了 include core/CodeIgniter.php
                        index.php 的代码执行完了
        system/core/CodeIgniter.php
               
                一开始依然是各中参数定义,引入常数、配置
               
                include('core/commons.php')
                        引入常用函数
                        commons.php 最重要的函数就是 load_class() 了
                        还有两个重要的是 config 相关的 get_config() 和 config_item()
                        没这三个 CI 起不来。
               
                config/constants.php
                        引入 application  下某个位置的 config/constants.php,主要是文件/文件夹操作相关的常数设置。
               
                其他配置
                        错误处理函数、运行时间限制等等
                        load_class()
               
                Load benchmark、hooks
                        第一个被加载的核心类是这个,Benchmark
                        hooks,CI 运行过程中的里程碑可以说是由 Hooks 来标记的。后面的 hook 都由它来打理

                hook: pre_system
                        这里对 CI 来说其实什么业务都还开始代码执行到这里,你想做点什么就去配置对应的 config/hooks.php,pre_system 指的是加载完 benchmark 和 hooks 之后的一个逻辑代码插入点。

                Load Config、Utf8、URI、Router、Output
                        pre_system 之后还是接着刚才的 load_class() 一口气加载 Config、Utf8、URI、Router、Output 五个类并实例化,根据构造函数还执行了一些业务逻辑:
                                Config 是接着前面 config_get() 的劳动成果,初始化一些配置,并设置参数 base_url 的值
                                utf8 设置了一些常数开关
                                URI、Router、Output 这时候可以说什么也没干

                hook: cache_override
                        撇开钩子不说,在业务逻辑上,执行到这里,程序已经有足够的工具资源来查找缓存文件了,虽然超级对象还没被实例化,但是 Output 对象已经有了,所需要的 URI、Config 对象也已经有了。
                        如果没有钩子,返回缓存内容,直接 exit()。所以这里来个钩子,就是插入处理读取缓存以及其他相关操作的业务代码,从而覆盖 CI 默认的 output::_display_cache(),返回完缓存内容记得 exit()。
                        
                Load Security、Input、Lang
                                Security生成一个 CSQF 待使用。Input 把 $_GET、$_POST、$_COOKIE 的值都处理了一遍。Lang需要 debug 时写一条 log。
                                载入 core/Controller.php,以及扩展文件,如果有的话。通过路由查找对应的控制器,确认类存在,确认所需的方法是否合法,不能下划线开始, 不能是 CI_Controller 的方法。一切顺利就 include 控制器所在的文件,否则 404。

                hook: pre_controller
                                走到这个点,就所有准备工作都做得差不多,万事具备只欠东风。可是设置影响控制器实例化的参数,主要是通过变量、参数修改来影响它的构造函数执行。

                $CI = new $class();
                                实例化控制器 $CI = new $class(),在 CI_Controller 的构造函数里,Loader 类被加载了。
                                仅仅这一行代码之后,钩子 post_controller_constructor 出现。

                hook: post_controller_constructor
                                两个 hook 之间就这么一个语句。
                                这时候还没开始处理业务请求,只是让你开始开始准备处理业务请求,给你一个钩子,你想干啥就干啥吧,主要是通过变量、参数修改来影响具体控制器方法 的执行。在这个环节之后,你写的控制器方法才被启用,首先是找一下有没有 _remap,有的话重定向到相应的方法上,如果最后调用控制器的方法失败就是 404 了。
                hook: post_controller
                hook: display_override
                hook: post_system
                display_override 如果没有逻辑代码要执行的话,就使用 Output::_display() 输出 view。这里的 hook 就是替代 Output::_display()处理要输出的字符串,和前面的 output::_display_cache() 差不多,只不过前面是 PHP 处理从缓存文件来的数据,这里是处理 PHP 临时生成的字符串的数据。
                       
                清理数据库连接
                        最后,清理一下 DB 资源了。

转载于:https://www.cnblogs.com/kudosharry/articles/2731115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值