QueryPHP V 4.0 采用命名空間的方式來有效組織項目的代碼,系統在運行過程中會自動注冊部分命名空間,通過自動注冊的命名空間與 autoload 結合起來從而實現高效的文件自動加載。
# 系統注冊命名空間組
為了滿足項目開發需求, QueryPHP 在項目運行過程中會注冊多個系統慣性命名空間,命名空間遵循 **PSR-4** 自動加載規范。
### 1):框架自身注冊
系統為框架自身所在路徑注冊了一個命名空間,我們在應用中通過如下 Q 頂層命名空間訪問到我們的類。
~~~
/**
* 注冊框架命名空間
*/
Q::import ( 'Q', Q_PATH, [
'ignore' => [
'resource'
]
] );
~~~
**例子:**
繼承框架提供的基類控制器 **controller**,實際對應的路徑為 **<project>/lib/queryphp/src/mvc/controller.php**
~~~
class index extend \Q\mvc\controller { }
~~~
### 2):項目公共文件注冊
系統為項目公共組件所在路徑注冊了一個命名空間,我們在應用中通過如下 com 頂層命名空間訪問到我們的類。
~~~
// 注冊公共組件命名空間
Q::import ( 'com', $this->com_path, [
'ignore' => [
'i18n',
'option',
'theme'
]
] );
~~~
**例子:**
繼承公共組件提供的基類模型 **base**,實際對應的路徑為 **<project>/com/model/base.php**
~~~
class user extend \com\model\base { }
~~~
### 3):項目應用文件注冊
系統為應用所在路徑注冊了一個命名空間,我們在應用中通過如下 app_name 頂層命名空間訪問到我們的類。
~~~
// 注冊命名空間
Q::import ( $this->app_name, $this->app_path . '/' . $this->app_name, [
[
'i18n',
'option',
'theme'
]
] );
~~~
**例子:**
繼承 home 提供的基類控制器 **base**,實際對應的路徑為 **<project>/app/home/controller/base.php**
~~~
class blog extend \home\controller\base { }
~~~
# 手動注冊命名空間組
系統通過 Q::import 來導入一個目錄(包括子目錄)所有命名空間,從而實現自動載入自主載入。
~~~
// 注冊命名空間
Q::import ( 'test', PROJECT_PATH . '/test', [
[
'not'
]
] );
~~~
> 提示:我們注冊一個 **項目** 下面的 **test** 命名空間組,這個時候我們可以自由地導入 **test** 里面的類了。
**例子:**
繼承 test 提供的一個 excel 文檔處理類 **phpexcel**,實際對應的路徑為 **<project>/test/phpexcel/excel.php**
~~~
$objExcel = new \test\phpexcel\excel();
~~~
# 手動注冊單個命名空間
Q::import 也是通過 Q::addNamespace 來導入命名空間的,我們這里也可以通過這個方法注冊命名空間。
~~~
// 添加命名空間
Q::addNamespace ( 'hello\world', PROJECT_PATH . '/hello/world');
~~~
> 提示:Q::addNamespace 的第二個參數可以傳入一個數組,同一個命名空間可以支持多個路徑。
**例子:**
繼承 hello\world 提供的一個 word 文檔處理類 **phpword**,實際對應的路徑為 **<project>/hello/world/phpword.php**
~~~
$objWord = new \hello\world\phpword();
~~~
# 總結
命名空間規范是整個框架基礎,理解好這里有助于掌握整個框架。
- 關于 QueryPHP
- 獲取 QueryPHP
- 環境要求
- 許可協議 Free
- 執行流程 MVC
- 命名規范 $sName
- 目錄結構 DIR
- 單一入口 index.php
- 響應客戶端請求 URL
- 命名空間與自動載入 Autoload
- 路由
- 路由導入
- 批量導入
- 參數正則
- 分組定義
- 路由綁定
- 路由域名
- 分層控制器
- 默認和初始化APP
- 默認控制器和方法
- url 模式
- url 生成
- url 偽靜態
- url 重寫
- url 重定向
- 控制器綁定
- 方法器分層
- 控制器 __init
- 控制器方法交互
- 模板引擎語法
- C變量輸出 $sName
- C變量支持函數和方法 $sName|trim
- C快捷輸出 ~
- C標簽簡化 Css & Javascript
- C默認值 eq 三元運算符
- C變量運算符 +-
- 變量遞增遞減 ++--
- C循環數據 list
- N變量賦值 assign
- N循環數據 list
- N循環數據高級版 lists
- C循環數據 while
- N循環數據 while
- C循環數據 for
- N循環數據 for
- C條件判斷 if
- N條件判斷 if
- 標簽嵌套無限層級
- N循環流程 break & continue
- N使用 PHP 代碼
- N包含子模板 include
- J模板引擎 intro
- J條件判斷 if
- J循環數據 each
- J變量 & 表達式
- J變量支持函數和方法 hello|test
- J默認值 eq 三元運算符
- J框架前端組件 jquery.queryphp.js
- J前端 CSS 規范
- J前端 JS 規范
- 保護標簽自身 tagself
- 數據庫
- 數據庫配置
- 執行原生 sql 語句
- 數據庫事務
- 數據庫構造器 prefix
- 數據庫構造器 table
- 數據庫構造器 forceIndex
- 數據庫構造器 where
- 數據庫構造器 bind
- 數據庫構造器 join
- 數據庫構造器 union
- 數據庫構造器 orderBy
- 數據庫構造器 groupBy
- 數據庫構造器 having
- 數據庫構造器 distinct
- 數據庫構造器 aggregate
- 數據庫構造器 limit
- 數據庫構造器 forUpdate
- 數據庫構造器 columns
- 數據庫構造器 reset
- 數據庫集合查詢
- 數據庫查詢數據 get
- 數據庫查詢多條數據 getAll
- 數據庫查詢單條數據 getOne
- 數據庫查詢聚合查詢 aggregate
- 數據庫寫入數據 insert
- 數據庫寫入數據 insertAll
- 配置
- 配置格式
- 慣性配置
- 配置文件
- 讀取配置
- 設置配置
- 刪除配置
- 日志
- 日志配置參數
- 日志路徑
- 日志過濾器
- 日志處理器
- 緩存
- 緩存配置參數
- 緩存路徑
- 緩存指定時間
- COOKIE
- COOKIE 配置參數
- 開發調試
- 頁面 trace