zoukankan      html  css  js  c++  java
  • 【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 ,施主,你已经功德圆满了!!!
  • 相关阅读:
    Spring Boot (五): Redis缓存使用姿势盘点
    跟我学SpringCloud | 第二十章:Spring Cloud 之 okhttp
    Spring Boot (四): Druid 连接池密码加密与监控
    跟我学SpringCloud | 第十九章:Spring Cloud 组件 Docker 化
    跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境
    Spring Boot (三): ORM 框架 JPA 与连接池 Hikari
    Spring Cloud Alibaba | Dubbo Spring Cloud 之 HTTP 实战
    Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合
    Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面
    可以穿梭时空的实时计算框架——Flink对时间的处理
  • 原文地址:https://www.cnblogs.com/china-flint/p/12420563.html
Copyright © 2011-2022 走看看