Discuz X3.2源码解析 discuz_application类(转自百度)

  1. discuz_application在/source/class/discuz/discuz_application.php中。php

    Discuz X3.2源码解析 discuz_application类
  2.  

    discuz_application继承自抽象类discuz_basehtml

    Discuz X3.2源码解析 discuz_application类
  3.  

    discuz_application主要实现对运行环境、配置、输入、输出、数据库、设置、用户、session、移动模块、计划任务、手机预览等方面的初始化。数据库

    Discuz X3.2源码解析 discuz_application类
  4.  

    instance()函数来示例化discuz_application, 构造函数中session

    public function __construct() {架构

    $this->_init_env();app

    $this->_init_config();函数

    $this->_init_input();学习

    $this->_init_output();this

    }设计

    初始化了运行环境、系统配置、输入、输出。

    在init()函数中又进行一部分初始化

    public function init() {

    if(!$this->initated) {

    $this->_init_db();

    $this->_init_setting();

    $this->_init_user();

    $this->_init_session();

    $this->_init_mobile();

    $this->_init_cron();

    $this->_init_misc();

    }

    $this->initated = true;

    }

    单纯看这个代码,会让人很疑惑,为何初始化操做不放在一块呢,分红功两个函数。这个时候看下/forum.php中的代码(如图)就明白了。

    discuz_application实例化后,设置var['mod']和cachelist 以后,才能够调用init()函数。

    其实这里把mod和cachelist设计为discuz_application构造函数参数便可,而后用一个init()函数完成初始化便可。

    我的的感受/forum.php中改为这种模式应该更好

    C::app()->var['mod'] = mod;

    C::app()->cachelist   = $cachelist;

    C::app()->init();

    f = new forum(C::app())

    f.doSomething()

    这样子代码简练易懂易改易扩展。

    Discuz X3.2源码解析 discuz_application类
  5.  

    此外还有一个很差的地方/source/class/class_core.php 中的core包装了discuz_application的实例化,而改文件又声明了一个DB对discuz_database的映射。 而在discuz_application的数据库初始化函数_init_db()中使用DB, 致使两个文件相互引用依赖,这也是致使discuz_application的初始化一部分在构造函数中,一部分在init()函数中的缘由之一。

    Discuz X3.2源码解析 discuz_application类
    Discuz X3.2源码解析 discuz_application类
  6. 6

    以前看到有人评论discuz的架构很差,当时想毕竟使用这么普遍、发展这么久的系统,应该不至于架构很差吧,要不怎么可以持续这么久的改进呢。

    如今看来,架构还真的是不敢恭维。想从里面学习架构的东西,感受是有点难喽。

相关文章
相关标签/搜索