定義: 命名空間是一種封裝事物的方法。
作用:一般用來解決在編寫類庫或應用程序時創建可重用的代碼如類或函數時碰到的兩類問題:
(1) 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。
(2)爲很長的標識符名稱(通常是爲了緩解第一類問題而定義的)創建一個別名(或簡短)的名 稱,提 高源代碼的可讀性。
命名空間裏可以出現類,函數,常量 ,但是常量必須由conts定義的常量命名空間纔有效,其命名規
則要符合php命名規則。
聲明:
namespace China; //必須放在最頂端 const nation='中國<br>'//常量命名空間; function getInfo() { echo "我是中國人"; } namespace USA; const nation='USA<br>'; function getInfo() { echo 'IAM A A'; } getInfo();//非限定名稱訪問//I AM AA (調用namespace USA的函數) \China\getInfo(); //完全限定訪問//我是中國人 (調用namespace China) echo nation; // 輸出USA echo \China\nation;//輸出中國
定義多個命名空間,使用大括號擴起來如下例:
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } ?>
命名空間的多級訪問:
namespace China\beijing\haidian; class Person { static $name ="李白"; } namespace USA\abc; class Person { static $name= "bbb"; } echo \China\beijing\haidian\Person::$name; //輸出李白 屬於多級訪問
訪問命名空間自動尋址
namespace China\beijing\haidian; function getInfo() { echo "zheshi china"; } namespace China\beijing; function getInfo() { echo "cccc"; } getInfo();//usa 命名空間在China\beijing haidian\getInfo();// zheshi china 相當與命名空間/China\beijing\haidian\getInfo(),使用相對地址去理解 beijing\haidian\getInfo();// 報錯, 命名空間相當與China\beijing\beijing\haidian\getInfo() 相對地址去理解 \China\beijing\haidian\getInfo();// zheshi china 在最前面加\ 屬於最頂層的空間,從第一個namespace 開始。相當於是一個絕對路徑
空間訪問形式 :
非限定訪問: echo getInfo(); 類似與;require('getInfo.php')
限定名稱訪問: China\getInfo(); 類似於require('China/getInfo.php) 系統自動尋址
完全限定訪問: \China\getInfo(); 類似於 requre('c:\china\getinfo.php);
引用命名空間: 使用use 來引用命名空間, 如下例:
namespace China\beijing\haidian; function Info() { echo "libai"; } namespace USA\WASH; function Info() { echo "abc"; } use China\beijing\haidian; haidian(); // 輸出abc haidian\Info();//輸出libai; 如果不use China\beijing\haidian 此處報錯,會直接尋址到 USA\WASH\haidian\Info(); 使用引用命名空間後 引用空間的最後一個地址,與訪問的第一個地址對上即可訪問。 上例子 haidian\Info(),與use China\beijing\haidian; 上的haidian匹配,因此可以訪問 如果是beijing\haidian\Info() 與 use China\beijing\haidian 匹配相當與 \China\beijing\haidian\beijing\haidian\Info() ,因此會報錯。
命名空間的注意事項:
namespace 必須在程序最上面,即使上面head
命名空間的地址不是真實存在的目錄,是虛擬的空間,但thinkphp 命名空間是真實路徑