Discuz!X3解读之类引入机制及目录结构

简介: 实例: - /source/class/table/table_forum_faq.php - /source/class/model/model_forum_post.php - /source/plugin/security/table/table_security_evilpost.

实例:

- /source/class/table/table_forum_faq.php
- /source/class/model/model_forum_post.php
- /source/plugin/security/table/table_security_evilpost.php

## 引入公共类import($name, $folder = '', $force = true)

1. 会索引被引入过的类,防止重复引入;
2. import以应用根目录的source目录为起点进行查找,再子一级目录以$folder定义为起点,$path = DISCUZ_ROOT.'/source/'.$folder;
3. 再对$name进行解析:如果$name中包含"/",处理掉两端无效的"/",取出其中包含的目录及文件名前缀信息进行最终拼装,如$name='model/forum_post',则拼装成'model/model_forum_post.php';
4. 最终引入;
5. 引入结果,引入成功返回true;返回失败,默认抛出异常、设置了!$force后返回false

## 创建模型对象 _make_obj($name, $type, $extendable = false, $p = array())

1. 根据$name的首字母是否为#,确定是否要调用插件目录中的类;$name格式:#插件标识#类名
2. $type决定类名和文件名的前缀,如model,table,最终的类名:model_$name
3. 再调用import方式引入类文件,这个过程会构造一个目录结构的参数过去;
前面提过,所有后台程序文件都是放到根目录的source下;
除了具体的业务代码,其它公用类分两大类:class、plugin/pluginid/
此处要引入的类就放在 $type 目录下,再传上$name名
4. 创建实例
创建实例之前,根据$extendable是否为真,确定是否将其创建为一种可动态扩展方法的对象。

## 带来的可能性

在不修改代码的情况下,暂时没想到

目录
相关文章
|
5月前
|
JavaScript 前端开发 Java
项目引入文件的常见报错
项目引入文件的常见报错
44 5
|
设计模式 前端开发
Yii2.0的主要目录结构是什么?底层原理是什么?
Yii2.0的主要目录结构是什么?底层原理是什么?
Yii2.0的主要目录结构是什么?底层原理是什么?
|
JSON JavaScript 前端开发
JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】
JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】
JXcore 打包在企业级项目里的合理运用和模块系统以及网络的配置详解【node.js】
|
前端开发 JavaScript PHP
跨域的本质-引入外部 php 文件| 学习笔记
快速学习跨域的本质-引入外部 php 文件。
95 0
|
PHP
【PHP秒杀系统】第三篇(续) 细说类文件的自动加载器
【PHP秒杀系统】第三篇(续) 细说类文件的自动加载器
82 0
【PHP秒杀系统】第三篇(续) 细说类文件的自动加载器
|
Linux PHP 数据库
Yii2框架(一)安装及目录结构
Yii2.0分为两个版本,basic(基础版)和advanced(高级版)。
432 0
Yii2框架(一)安装及目录结构
|
缓存 开发框架 前端开发
grape动态PHP结构(一)——目录结构与配置文件
结构的名字grape,中文名叫葡萄,因为最近一个同事经常带葡萄到公司给我们吃,受到启发想到了这个名字。
grape动态PHP结构(一)——目录结构与配置文件