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是否為真,確定是否將其建立為一種可動態擴充套件方法的物件。
## 帶來的可能性
在不修改程式碼的情況下,暫時沒想到
相關文章
- Jmeter之目錄結構JMeter
- 2.3 sqlmap目錄及結構SQL
- JVM類載入機制及雙親委派機制原始碼解讀JVM原始碼
- Helm目錄結構講解
- (2)caffe總結之目錄結構
- Android Handler機制之總目錄Android
- (一)Linux之目錄結構Linux
- jmeter基礎之目錄結構解析及配置檔案修改JMeter
- Linux 目錄結構及詳細操作Linux
- 完美解讀Linux中檔案系統的目錄結構Linux
- Linux之旅第一篇-目錄結構及操作目錄Linux
- Tomcat的目錄結構詳解Tomcat
- PostgreSQL 目錄結構SQL
- fabric 目錄結構
- dedecms 目錄結構
- Android Studio目錄結構及工程專案結構解析Android
- Linux 目錄結構及檔案基本操作Linux
- JVM之類載入機制總結JVM
- Nand Flash結構及錯誤機制NaN
- Android原始碼目錄結構詳解Android原始碼
- 11_Linux目錄結構講解Linux
- Tomcat目錄結構Tomcat
- 分析Angular目錄結構Angular
- ecos框架目錄結構框架
- linux 目錄結構Linux
- 系統目錄結構
- django的目錄結構Django
- 程式碼目錄結構記錄
- libevent原始碼初識及目錄結構分析原始碼
- 目錄結構檢視及目錄下各個檔案的大小的統計
- linux檔案系統及目錄結構詳解_轉摘chinaunixLinux
- Nginx目錄結構與配置檔案詳解Nginx
- vue-cli 目錄結構詳細講解Vue
- 伺服器與目錄結構深入瞭解伺服器
- DiscuzX2.5完整目錄結構【模板目錄template】
- Linux學習(三)之系統目錄結構Linux
- Symfony2學習筆記之目錄結構筆記
- windows 2000活動目錄之結構篇(轉)Windows