目錄
命名空間" >命名空間
二、多層命名空間和三種存取方式" >二、多層命名空間和三種存取方式
1、非限定名稱存取方式" >1、非限定名稱存取方式
2、完全限定名稱存取方式" >2、完全限定名稱存取方式
3、限定名稱存取方式" >3、限定名稱存取方式
三、命名空間與空間類別元素的引入機制" >三、命名空間與空間類別元素的引入機制
#1、引入命名空間" >#1、引入命名空間
2.引入空間類別元素" >2.引入空間類別元素
四、公共空間" >四、公共空間
五、 命名空間是虛擬的定義空間,不是真實存在目錄  " >五、 命名空間是虛擬的定義空間,不是真實存在目錄 
首頁 頭條 2017新手學習架構必備:Thinkphp5框架教學命名空間詳解

2017新手學習架構必備:Thinkphp5框架教學命名空間詳解

Jul 06, 2017 am 09:27 AM
php 必備

        ThinkPHP是一個快速、相容且簡單的輕量國產PHP開發架構,使用ThinkPHP框架可以大幅簡化我們的開發過程,節省時間。這篇文章就是php中文網帶一個大家學習ThinkPHP中十分重要的概念:命名空間

命名空間

        ThinkPHP採用命名空間方式定義和自動載入類別庫文件,有效的解決了多模組和Composer類別庫之間的命名空間衝突問題,並且實作了更有效率的類別庫自動載入機制。

可以移步至我們php中文網課程:彈指間學會PHP程式之命名空間教學

我們php中文網也提供了相關影片課程:獨孤九賤(5)_ThinkPHP5影片教學

2017新手學習架構必備:Thinkphp5框架教學命名空間詳解

        由於PHP語法「裡不支援函數重載機制,如果一個應用程式裡有兩個同名的方法,怎麼辦?在Yii框架為了避免名字重複造成問題,全部的類前邊都有 C 字樣,而在ThinkPHP裡就引入了命名空間這個概念。其中有幾點需要特別注意:

      a) 命名空間是虛擬的定義空間,不是真實存在目錄 

      b) 命名空間的分隔符號都是反斜線\ 

      c) 命名空間只對函數,類,常數(const定義的常數,非define定義的常數)有效。

      d) 命名空間有三種存取方式:非限定名稱存取方式;限定名稱存取方式;完全限定名稱存取方式。

接下來就一一詳細說明。

 一、命名空間只對函數,類,常數(const定義的常數,非define定義的常數)有效。

#      這裡我們宣告了兩個命名空間space1和space2 ,兩個命名空間下面有同名的函數getmsg(),同名的常數a,同名的類別Animal,因為它們處於不同的命名空間下,所以不會產生錯誤。我們在瀏覽器中打開,得到如下輸出:helloworld。

      如果我們試著用define定義兩個同名常數呢?

 瀏覽器中開啟封包如下錯誤:

 所以命名空間只對函數,類,常數(const定義的常數,非define定義的常數)有效。

二、多層命名空間和三種存取方式

#     上面宣告的命名空間space1和space2都是單級命名空間,形狀如space1\space2\space3的命名空間為多層命名空間,分隔符號為\。以下介紹三種命名空間存取方式:

1、非限定名稱存取方式

 當以非限定名稱存取方式存取時,存取的是目前命名空間下的函數(類別和常數同理),所以以上程式碼輸出結果是:world。

2、完全限定名稱存取方式

      若想要在name2\space2 命名空間下存取name1\space1下的getmsg()方法,可以使用完全限定名稱存取方式(相當於絕對路徑存取)。

所以上述程式碼的輸出結果為:hello。

3、限定名稱存取方式

#       限定名稱存取方式與完全限定名稱存取方式差異只在最前面的\ 。如果上例使用限定名稱存取方式訪問,則將最後一行改為:name1\space1\getmsg();

此時,我們在瀏覽器中打開,發現如下錯誤:

      提示我們無法找到命名空間name2\space2\name1\space1 下的getmsg() 函數。原因是限定名稱訪問方式相當於相對路徑訪問,我們在當前命名空間下使用限定名稱訪問方式訪問:name1\space1\getmsg(),會在當前命名空間下尋找name1\space1下的getmsg()函數,找不到就會報錯。所以,如果我們再宣告一個名為: name2\space2\name1\space1 的命名空間,上述存取可以正常執行,如下:

輸出結果是:hello -world。

三、命名空間與空間類別元素的引入機制

#1、引入命名空間

#      透過上面的例子,我們可以看到如果想要在當前命名空間下使用另一個命名空間下的函數、常數或類別元素的時候,我們需要使用完全限定訪問方式進行訪問,寫程式碼比較繁瑣,所以,我們可以引入命名空間,然後使用限定名稱訪問方式進行訪問,簡化訪問過程。

 輸出結果為:hello dog

2.引入空間類別元素

      與命名空間的引入方式類似,使用use 關鍵字引入空間類別元素,然後直接使用非限定存取方式進行參觀即可。不過,在目前命名空間下不能存在與引入類別同名的類,否則會產生錯誤。

 

#輸出結果為:dog大黃。

四、公共空間

      若我們沒有使用namespace 關鍵字宣告命名空間,則其屬於公共空間。

      這裡我們建立兩個php文件,1.php 和2.php,1.php命名空間為name1\space1, 2.php為公共空間。

1.php:

namespace  name1\space1;
header("content-type:text/html;charset=utf-8");
class Animal
{
    public $obj = 'dog';
    static $name = '大黄';
}
function getmsg()
{
    echo 'hello';
}

const MN = 123;

//在命名空间中引入公共命名空间

include ('./2.php');

getmsg();       //访问的是当前空间下的getmsg()函数
echo &#39;</br>&#39;;
\getmsg();      //访问的是公共命名空间(即2.php文件)下的getmsg()函数

echo &#39;</br>&#39;;
echo MN;          //会先在当前命名空间下寻找MN常量,如果找到就输出,如果找不到,就会去公共命名空间寻找MN常量
echo &#39;</br>&#39;;
echo  \MN;         //访问的是公共命名空间(即2.php文件)下的MN常量
登入後複製

#2.php:

//没有指定命名空间,则其属于公共命名空间
function getmsg()
{
    echo &#39;world&#39;;
}

const MN = &#39;456&#39;;
登入後複製

瀏覽器中開啟1.php ,輸出結果為:

hello
world
123
456

五、 命名空間是虛擬的定義空間,不是真實存在目錄 

       在thinkphp5.0中,命名空間是虛擬的定義空間,不是真實存在目錄。只不過是官方在宣告命名空間時,命名空間的名稱刻意與目錄結構有對應關係。

例如,我們開啟application/index/controller 資料夾下的Index.php 文件,其命名空間為: app\index\controller。在目錄結構中並不存在。

 

命名空間別名

框架允許為命名空間定義別名,例如:

namespace app\index\model;
use think\Model;
class User extends Model
{
}
登入後複製

 原來在控制器裡面呼叫方式為:

namespace app\index\controller;
use app\index\model\User;
class Index
{
 public function index()
 {
  $user = new User();
 }
}
登入後複製

如果我們在應用公共檔案中註冊命名空間別名如下:

\think\Loader::addNamespaceAlias(&#39;model&#39;,&#39;app\index\model&#39;);
登入後複製

那麼,上面的控制器程式碼就可以更改為:

namespace app\index\controller;
use model\User;
class Index
{
 public function index()
 {
  $user = new User();
 }
}
登入後複製

相关资料推荐: 

1. 什么是php命名空间?命名空间用法实例详解

2. php命名空间与自动加载类用法实例详解

3. php关于use、命名空间、引入类文件和自动加载类的实例详解

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。