您现在的位置是:首页 > 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开源论坛手把手教
添加mysql普通用户接着上篇的lamp这篇安装Discuz配置虚拟主机1、打开虚拟主机配置2、配置虚拟主机3、创建DocumentRoot路径
Discuz集成第三方统计工具如百度统计的方法
将Discuz与百度统计集成,意味着在你的论坛页面中嵌入百度统计的代码,从而能够跟踪用户的访问行为。这种集成可以帮助你了解用户如何使用你的论坛,哪些页面欢迎,以及用户的来源和路径。
Discuz表结构详解
cdb_access 用户权限表cdb_adminactions 管理动作表cdb_admingroups 管理组数据表cdb_adminnotes 管理员留言
Python实现Discuz附件下载权限绕过漏洞
最近压力有些大,想玩点游戏放松下,去Mac论坛下载,发现需要各种权限,于是蛋疼了。上网查了discuz! x3.1破解,手动替换,发现出现“链接已过期”。
相关源码
-
自适应恒温恒湿机空调机械设备营销型网站模板(自适应手机版)响应式营销型恒温恒湿机环境设备类网站pbootcms模板 蓝色营销型空调设备网站源码下载PbootCMS内核开发的网站模板,该模板适用于营查看源码 -
(响应式)蓝色智能摄像头安防防盗电子设备免费pbootcms源码下载这是一款针对智能安防行业特点设计的网站模板,采用蓝色系配色方案,体现科技感和安全性。模板包含产品展示、解决方案、技术支持和新闻中心等核心模块,能够全面展示智能安防设备的技术特点和行业应用。查看源码 -
(自适应响应式)工业机床工程农业机械设备网站源码下载框架适用于工程机械、机床设备等工业领域。通过模块调整可快速转型为农业机械、物流设备展示系统。预留7种工业产品展示模板。查看源码 -
(PC+WAP)化工材料企业环保能源绿色营销型pbootcms模板源码下载本模板为化工材料及环保能源企业设计,采用PbootCMS开发,可展示各类化工产品、环保技术及能源解决方案。查看源码 -
(自适应响应式)动力刀座五金机械设备pbootcms网站源码下载为动力刀座及五金机械企业定制的响应式网站框架,基于PbootCMS系统深度开发,助力传统制造企业实现数字化转型升级。采用手工编写的DIV+CSS前端架构,代码执行效率提升40%。查看源码 -
(PC+WAP)房屋建造建筑工程房地产建材行pbootcms网站模板下载本模板基于PbootCMS内核开发,为房屋建造、建筑工程及房地产建材类企业设计。通过本模板可快速搭建具有行业特色的企业官网,只需替换文字与图片内容即可适配其他行业使用。查看源码
| 分享笔记 (共有 篇笔记) |