您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
Discuz核心函数的解析
秦树琪2025-07-19Discuz教程已有人查阅
导读dz采用的是多入口的方式,在每个入口函数你能看到引用,启动核心类的语句(其余省略),如下:我们进入class_core.php看看,这是dz项目的启动类
dz采用的是多入口的方式,在每个入口函数你能看到引用,启动核心类的语句(其余省略),如下:
a)首先做的自定义异常处理,自定义错误处理,自定义自动装载函数。
c)从流程来看,我们需要首先了解creatapp内部的详细代码,他是用一个单例模式来实例化一个app的对象
e)分别用C和DB扩展了core和discuz_database,方便以后的需要
其中初始化DB,全局的setting,手机mobile,全局的config都在其中可以仔细的阅读这个类。
这里我重点看看DB:
discuz_application中有个init_db属性,他是控制是否初始化DB的开关,代码如下:
我先来梳理下关于数据库的几个类,他们的关系
require './source/class/class_core.php';
C::app()->init();
我们进入class_core.php看看,这是dz项目的启动类a)首先做的自定义异常处理,自定义错误处理,自定义自动装载函数。
set_exception_handler(array('core', 'handleException')); //自定义异常处理
//如果开启debug,则自定义错误处理
if(DISCUZ_CORE_DEBUG) {
set_error_handler(array('core', 'handleError'));
register_shutdown_function(array('core', 'handleShutdown'));
}
//自定义自动装载函数
if(function_exists('spl_autoload_register')) {
spl_autoload_register(array('core', 'autoload'));
} else {
function __autoload($class) {
return core::autoload($class);
}
}
b)接下来我们看看class_core核心类是怎么写的c)从流程来看,我们需要首先了解creatapp内部的详细代码,他是用一个单例模式来实例化一个app的对象
public static function creatapp() {
if(!is_object(self::$_app)) {
self::$_app = discuz_application::instance();
}
return self::$_app;
}
通过C::app()来返回这个对象
public static function app() {
return self::$_app;
}
d)t,memory方法分别用来获取数据表,缓存等对象实例e)分别用C和DB扩展了core和discuz_database,方便以后的需要
class C extends core {}
class DB extends discuz_database {}
现在我们在看看creatapp方法里面的discuz_application类,他是完成discuz应用核心初始化的基础类其中初始化DB,全局的setting,手机mobile,全局的config都在其中可以仔细的阅读这个类。
这里我重点看看DB:
discuz_application中有个init_db属性,他是控制是否初始化DB的开关,代码如下:
//默认的数据库驱动是db_driver_mysql这个类,如果存在从库的配置项,则将数据库驱动换成db_driver_mysql_slave
private function _init_db() {
if($this->init_db) {
$driver = 'db_driver_mysql';
if(count(getglobal('config/db/slave'))) {
$driver = 'db_driver_mysql_slave';
}
DB::init($driver, $this->config['db']);
}
}
从class DB extends discuz_database {}我们可以看到,DB只是对discuz_database的继承,实现数据库封装的是在discuz_database中完成的。我先来梳理下关于数据库的几个类,他们的关系
discuz_database是对db_driver_mysql进行的一次封装,其中的public static $db;就是数据库的句柄
db_driver_mysql_slave是对db_driver_mysql进行的继承,并重写了以下方法
function set_config() {}
function table_name() {}
function query() {} //主要对sql语句进行判断,判断是链接主库还是从库
本文标签:
很赞哦! ()
上一篇:创建论坛Discuz的方法
下一篇:Discuz$_G全局变量介绍
图文教程
Discuz!X3.1数据库的操作介绍
MVC全名是Model-View-Controller,是模型(model)-视图(view)-控制器(controller)的缩写,它是一种软件设计思想。使用一种业务逻辑,数据和显示分离的方法组织代码,实现代码复用的较大化
Discuz重写的TextBox控件分析
Discuz重写的TextBox控件,非常好用,就是看不懂,有高手能看懂的,给解释下!using System;using System.Collections;using System.Web.UI;
Discuz论坛提速优化技巧
Discuz是国内最受站长们欢迎的建站源码之一,除了开源以外还有着很强大的后台,即便是没有建站基础和不懂代码的站长也能很快的架设出一个论坛,甚至是门户。
从PHP的模板引擎看Discuz模板机制
此文转自第七期,看看人家写的东西。鉴于对PHP的熟悉度及以后的维护,最近想把那个ASP的分类信息网改一下,前台基本改版 完毕,使用了fleaPHP提供的架构(对比了
相关源码
-
(自适应响应式)HTML5幕墙装饰工程建筑装修公司pbootcms模板下载基于PbootCMS开发的响应式模板,为幕墙工程、建筑装饰企业设计,通过数字化展示提升企业专业形象与项目展示能力。结构化数据标记增强项目案例收录,智能URL路由优化,支持每个工程案例独立设置关键词与描述查看源码 -
pbootcms模板(PC+WAP)传媒广告影视公司网站源码基于PbootCMS内核开发的全自适应传媒文化网站模板,为影视公司、广告传媒企业打造,同时支持多行业快速适配。通过替换文字图片即可转换为其他行业网站查看源码 -
帝国cms7.5手游评测资讯礼包合集游戏专区下载网站模板本模板基于帝国CMS系统开发,为手游门户网站设计。支持PC端与移动端同步生成HTML静态页面,内置多端同步生成功能。模板架构针对手业特点优化,满足APP下载、游戏资讯、攻略等内容发布需求。查看源码 -
(自适应)简繁双语机械矿山矿石五金设备pbootcms源码下载本模板基于PbootCMS开发,主要面向机械五金、矿山矿石设备等行业,支持简体中文和繁体中文双语切换。采用响应式布局技术,确保在各种设备上都能获得良好的浏览体验。模板设计注重展示工业设备的专业性和技术特点,帮助企业建立可靠的线上展示平台。查看源码 -
(PC+WAP)房屋建造建筑工程房地产建材行pbootcms网站模板下载本模板基于PbootCMS内核开发,为房屋建造、建筑工程及房地产建材类企业设计。通过本模板可快速搭建具有行业特色的企业官网,只需替换文字与图片内容即可适配其他行业使用。查看源码 -
(自适应)绿色LED灯具照明灯饰灯光灯泡pbootcms网站源码下载本模板基于PbootCMS内核开发,为LED照明、灯具制造及相关光电技术企业量身打造。设计充分考虑了照明行业的展示需求,从产品陈列到技术说明,从光源展示到工程案例,每一个细节都体现出专业照明行业的特点。查看源码
| 分享笔记 (共有 篇笔记) |
