zoukankan      html  css  js  c++  java
  • Discuz X3.2源码解析 discuz_application类(转自百度)

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

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

      discuz_application继承自抽象类discuz_base

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

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

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

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

      public function __construct() {

      $this->_init_env();

      $this->_init_config();

      $this->_init_input();

      $this->_init_output();

      }

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

      在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的架构不好,当时想毕竟使用这么广泛、发展这么久的系统,应该不至于架构不好吧,要不怎么能够持续这么久的改进呢。

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

  • 相关阅读:
    EasyMvc入门教程基本控件说明(6)进度条
    EasyMvc入门教程基本控件说明(3)时间线
    EasyMvc入门教程基本控件说明(4)折叠面板
    EasyMvc入门教程基本控件说明(11)菜单导航
    在一天的24小时之中,时钟的时针、分针和秒针完
    Maven Tutorial
    JXL操作Excel
    Beanutils的基本用法
    利用hibernate分析数据库中的表,属性以及对应的类的类名,字段
    beanutils的一个应用
  • 原文地址:https://www.cnblogs.com/alleyonline/p/8367763.html
Copyright © 2011-2022 走看看