路由&模組化設計&名稱空間

仇諾伊發表於2017-12-14

ThinkPHP採用模組化的架構思想,可以支援多模組應用的建立,讓應用的擴充套件更加方便. 先簡單說下路由規則: ###什麼是路由?### 系統從url引數中分析當前請求的分組(平臺),控制器和操作方法的過程就是路由. tp框架路由共有四種形式

// 繫結Admin模組到當前入口檔案
define('BIND_MODULE','Admin');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';/ /可不要
複製程式碼

如果需要生成更多的控制器類,可以定義BUILD_CONTROLLER_LIST常量.

// 繫結Admin模組到當前入口檔案
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
複製程式碼

注意:預設生成的控制器類都是繼承Think\Controller,如果需要繼承其他的公共類需要另外調整。 如果在應用的公共配置檔案中設定關閉了 APP_USE_NAMESPACE的話,生成的控制器類則不會採用名稱空間定義。 ##名稱空間##

  • 什麼是名稱空間? 在php程式語言裡邊,語法規則要求同名稱的函式、類名、常量在一個請求裡邊不允許出現多次。如果有的應用程式不得已必須出現多個同名的 函式、類名、常量,那麼我們就可以把它們放到不同的空間裡邊做請求。這個不同的空間就稱作“名稱空間”。
    名稱空間
    同一個請求裡邊定義兩個同名的函式getInfo(),右圖由於有使用名稱空間,使得程式可以正常執行。 同名稱的兩個函式在同一個空間進行訪問系統要報錯.
    這裡寫圖片描述
    同名稱的兩個函式放到不同空間做訪問,就不會報錯
    這裡寫圖片描述

使用名稱空間 通過namespace關鍵字宣告名稱空間。 namespace 空間名稱; (空間名稱 按照php正確的命名方式定義即可) 名稱空間針對 函式、類名、const常量 三部分起作用,並統稱為“元素”。 常量的宣告:

define(名稱,值);       //(在類外部宣告常量)與名稱空間沒有關係
//同名稱常量只能define一次
const  名稱=值;       //與名稱空間有關係
複製程式碼

① const可以在類的內部宣告常量資訊(類常量) ② const也可以在類外部宣告常量(正常常量) 使用名稱空間的時候const可以放到類外部宣告常量。 同名稱的多個常量,可以分別定義到不同的“名稱空間”裡邊 const和define的區別: 前者針對名稱空間發生影響,後者不發生影響。 const可以宣告多個同名稱的常量 define對同名稱常量只能宣告一個

路由&模組化設計&名稱空間
空間元素的訪問(當前空間、其他空間):
這裡寫圖片描述
**子級(多級)空間 ** 名稱空間可以讓我們存放許多元素(函式、類、常量),有的時候元素比較多,為了管理方便,可以對元素進行分門別類地儲存。也就是說名稱空間可以設定為多級空間。多級空間的最後一級空間就稱為“子級空間” 多級空間的宣告及空間元素的訪問:
這裡寫圖片描述
空間元素訪問的三種形式 ① 非限定名稱

echo Animal::$name;   就近訪問上邊與其挨著最近空間的
Animal元素
(類似php引入檔案:include “common.php”; //相對路徑
引入當前目錄下的common.php檔案)
複製程式碼

② 限定名稱

echo beijing\Animal::$name; // 把當前空間 和 beijing空間聯合獲得Animal元素
(類似php引入檔案:include “Common/Conf/config.php”;  相對路徑)
複製程式碼

③ 完全限定名稱

echo \beijing\Animal::$name;  //訪問beijing空間的Animal元素
(類似php引入檔案:include “d:/web/1121/Conf/common.php”; 絕對路徑引入檔案)
複製程式碼

訪問空間元素的兩種方式:

這裡寫圖片描述
限定名稱訪問元素:
這裡寫圖片描述
限定名稱訪問元素的特殊情況,linken被巧合訪問到:
這裡寫圖片描述
引入機制  名稱空間可以宣告為多級空間,這個多級空間元素在其他空間內部訪問的時候,不得已需要通過 完全限定名稱 方式,這個完全限定名稱不方便開發、維護,為了降低程式碼的複雜度,可以在當前的空間把指定的空間給引入進來,進而可以方便地通過“限定名稱”的方便的形式使用其他空間的元素。 空間引入  use 空間;
這裡寫圖片描述

相關文章