class_core.php,主要實現瞭如下功能:php
註冊 autoload 方法和異常處理方法數據庫
C::t 方法的實現:經過 C::t 方法來調用數據層對應表的對象來實現對數據的操做編程
memory 的初始化:主要由 discuz_memory 類來實現session
建立 discuz_application 實例 ( discuz_application 是原來 discuz! X2 的 discuz_core):進行核心的初始化操做,主要有加載配置文件、加載環境變量、鏈接數據庫、加載setting信息、初始化用戶數據、session的初始、計劃任務等app
簡寫類的映射:將 class core 映射爲 C,discuz_database 映射爲 DB,僅爲方便使用,代碼以下函數
class C extends core {}class DB extends discuz_database {}網站
discuz_application 是整個discuz系統運行的基礎,discuz在處理請求前,會先經過/source/class/class_core.php中的 C::creatapp();進行實例化,以下圖:對象
discuz_application的定義在/source/class/discuz/discuz_application.php。進行核心的初始化操做,主要有加載配置文件、加載環境變量、鏈接數據庫、加載setting信息、初始化用戶數據、session的初始、計劃任務等。從上圖中能夠看得出C::createapp()實例化discuz_application用了單例模式,但外面獲取discuz_application實例用的是C::app(),因此以爲直接把createapp()函數與app()函數合併便可,createapp()沒有存在的必要。blog
core_class.php開頭定義一些常量io
define('IN_DISCUZ', true);
define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -12));
define('DISCUZ_CORE_DEBUG', false);
define('DISCUZ_TABLE_EXTENDABLE', false);
IN_DISCUZ 是爲了判斷文件是否沒通過合法入口文件調用,並且被請求直接調用,防止別有用心的人經過直接瀏覽相關文件,獲取到系統的相關信息。早些年頭,一些系統配置信息(像數據庫配置信息)會被直接瀏覽config.php等配置文件而獲取系統關鍵信息,從而對網站系統形成威脅。
DISCUZ_ROOT 這個定義也有點太low了吧,substr(dirname(__FILE__), 0, -12) 基本是把文件結構定死在了/source/class 這個目錄下了。看到這個代碼我都樂了半天。這個代碼倒真是省事,但不宜擴展。
整個core類成員所有靜態化,面向對象的編程思想只用了其中最基本的包裝,除此以外跟面向對象編程沒任何關係。看得有點心累。。。。