Discuz!X3解读之类引入机制及目录结构
实例:
- /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是否为真,确定是否将其创建为一种可动态扩展方法的对象。
## 带来的可能性
在不修改代码的情况下,暂时没想到
Discuz!X3解读之类引入机制及目录结构的更多相关文章
- 比起Windows,怎样解读Linux的文件系统与目录结构?
比起Windows,怎样解读Linux的文件系统与目录结构? Linux 和Windows的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对Window ...
- 比起 Windows,怎样解读 Linux 的文件系统与目录结构?
Linux 和 Windows 的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对 Windows 和 Linux 上面文件系统原理.组织概念进行区分, ...
- 对discuz的代码分析学习(一)目录结构
主目录 DISCUZ用的是自己的框架,和其他框架应用一样属于单入口应用.主目录下的.php文件,大部分是应用的入口文件. home.php:家园入口,即论坛中类似博客的那个东西.index.php:首 ...
- 【转】完美解读Linux中文件系统的目录结构
一.前 言 接触Linux也有一段时间了,不过这几天在编译开源程序时,才发现自己对linux文件系统的目录结构了解的不够透彻,很多重要目录都说不清楚是用来干嘛的,于是在网上百度了一下这方面的介绍,根据 ...
- Linux文件系统的目录结构详解
Linux文件系统的目录结构详解 一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...
- 如何将各种低版本的discuz版本升级到discuz x3.0
最近在做discuz改版的项目,遇到了很多问题,相信很多拥有discuz论坛的版主,站长和程序猿在升级或改版discuz的过程中遇到过和我一样的问题,所以我开了一个discuz专栏,为大家讲解一下di ...
- Node中的模块引入机制
1.如果模块在当前目录下,可以通过下面语句将模块引入进来,注意需要使用 "./"表示当前路径 const currency = require('./currency'); ←-- ...
- Discuz! X3 全新安装图文教程
Discuz! 是腾讯旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务.让论坛(BBS).个人空间(SNS).门户(Portal).群组(Group).应用开放平台( ...
- Discuz x3.2利用阿里云cdn处理https访问亲测教程
第一步配置cdn和https 1.首先去阿里云.腾讯云.七牛云等申请免费https证书 2.虚拟主机是不能直接支持https的,需要cdn处理后才可以,并且端口是80 3.开启cdn加速处理,(买一个 ...
随机推荐
- Java 或者android 的加密技术
可以将Java文件编译之后得到的class文件(字节码)进行加密. 然后自定义一个classloader-类加载器,在载入class文件之后,对它进行解密,然后就可以正常运行了. 猜测,android ...
- C#如何更好地理解引用类型和值类型
说道值类型和引用类型,在C#中,官方的说法就是: 值类型直接指向数据:一般包括C#自带的所有数字类型,字符类型,bool类型,当然还有自定义的结构类型和枚举类型 而引用类型则是指向数据存储的地址.一般 ...
- EF: Returns multi table from procedure
原文:https://msdn.microsoft.com/en-us/data/jj691402.aspx
- linux系统和依赖包常用下载地址
http://ftp.gnome.org/pub/gnome/sources/gstreamer/0.10/ http://www.linuxfromscratch.org/blfs/view/svn ...
- 国内 Composer 镜像收集
本文转载自: https://www.insp.top/article/composer-mirror-image 常见的: { "repositories": [ {" ...
- 图解 & 深入浅出 JavaWeb:Servlet 再说几句
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- Windows Phone 8.1 Update1 支持中文“小娜”及开发者模拟器更新
千呼万唤的 Windows Phone 8.1 Update1 在 developer Perview 发布了还没有升级的朋友随我先睹为快吧.升级了的朋友们来看看 WP8.1 update1 还有哪些 ...
- netty ByteToMessageDecoder 分析
ByteToMessageDecoder 1.socket 移除时触发,最后次读数据处理 @Override public final void handlerRemoved(ChannelHandl ...
- 修改mysql默认字符集的方法
+--------------------------+---------------------------------+ | Variable_name | Value | +---------- ...
- Python使用libsvm的“ImportError: No module named svmutil”问题
from:http://blog.csdn.net/xmu_jupiter/article/details/46830327 这几天快被Python的一些细节问题整死了,浪费了不少时间.现在把这些记录 ...