• 【PHP】Yii 1.0 生命周期源码 详细解读


    生命周期源码解读

    采用非consoleweb模式

    • 开始加载入口文件index.php
    • 开始定义debugtrace_level常量
    • 加载框架入口文件yii.php,注册类自动加载函数YiiBaseautoload方法
    • 通过配置文件 config 生成 webApplication 实例,
    • 如果查询不到 CWebApplication 类,调用autoload方法,找出类文件路径再包含进来include/require
    • 生成实例先调用构造函数__constructCWebApplication 无构造函数,朝上递归,搜索父类的构造方法即CApplication构造方法
    • CApplication定义了 Yii 的全局对象 $_app, 其次定义了一些路径如basePath,application,webroot,extensionPath
    • 构造函数 根据 config 文件的 alias 数组定义一些路径别名
    • 再进行预初始化(1.0版本为空)
    • 然后才定义全局的Exception,Error处理函数
    • 然后注册一些系统的核心组件 components
    • 注册完组件后, 通过config数组,把config所有属性赋予到CWebApplication实例上
    • 这里很重要,如果config里的属性在CWebApplication里面没有,则调用CWebApplication的父类CModule定义的魔术方法__isset
    • 如果检测调用的属性不是组件,则调用CModule的父类魔术方法__set,这个方法会自发的把属性转换为方法,去调用相应的方法
    • 通过 configimport 属性设置 include_path 属性
    • 通过 components 属性设置预先加载相应的组件配置(注意,这里还没有生成组件实例哦)
    • 通过 modules 加载模块化配置,设置模块路径别名
    • 通过 params 配置一些后面控制器要用到的一些全局参数(用户级参数即用户自己根据项目需要的参数在这里面定义)
    • 注意,config的一级子属性不是随意配置的,否则会报找不到属性|方法的Exception
    • 把所有的属性赋予到CWebApplication上后,开始绑定一些behavior
    • 然后根据 configpreload 属性加载生成一些组件实例(注意,这里才生成真正的组件实例)
    • 然后调用 CWebApplication'init' 方法进行一些初始化的操作
    • init方法里面调用 request 的核心组件(这里生成了真正的request组件实例)
    • 到这里,CApplication的构造方法就执行完毕了
    • 然后调用CApplicationrun方法(因为$this指向的run方法在CWebApplication里面不存在,往上递归,调用父类的同名方法)
    • run方法会触发onBeginRequest事件,register_shutdown_function注册程序关闭前执行的end方法, 然后调用processRequest方法开始处理具体的请求,然后调用onEndRequest事件
    • processRequest 会处理具体的控制器请求
    • 至此,Game Over ,施主,你已经功德圆满了!!!
  • 相关阅读:
    WPF之窗体说明
    WPF之基本概念
    WPF学习之button
    写一本”错误百出”的C语言学习教程(一)
    JSP的工作原理-还是没理解--多看点再写。
    Java将中文转换成unicode字符。
    postgres 导出数据到csv 文件
    python小试身手-文件重命名,文件复制和压缩(.gz)
    python 环境安装 mark下。
    JRE,JVM,JDK的区别---粘自百度知道、
  • 原文地址:https://www.cnblogs.com/china-flint/p/12420563.html
Copyright © 2020-2023  润新知