關於php的命名空間的理解

2021-08-15 19:01:51 字數 1562 閱讀 3708

什麼是命名空間以及如何定義命名空間

一般情況向,在乙個php程式源**檔案或同乙個請求中是不允許有兩個以上相同名稱的類名、常量名或者函式名的,這樣的話,程式在執行的時候就會報錯。但是,在很多實際情況下,我們是無法避免在同乙個檔案下有兩個以上相同名稱的類名、常量名或者函式名的。這種情況下就需要引入命名空間。

舉個例子:

<?php

function

getuser

()function

getuser

()

像這樣的程式在執行的時候是會報錯的。所以我們引入命名空間,如下:

<?php

namespace get1

function

getuser ()

namespace get2

function

getuser ()

如何理解命名空間的含義呢?以上面的**為例,我們把這個php檔案想象成是乙個資料夾,而裡面的兩個函式想象成是兩個檔案,但是在同乙個資料夾下是不允許有兩個相同名稱的檔案的,所以我們就必須的將他們分到兩個不同名稱的資料夾中。命名空間的道理就是這樣的。

特別注意

命名空間只對類名、函式名、常量(const定義的)有效。

乙個檔案的最前面的namespace前面不能有任何有效的字元

如何使用命名空間?

例如,我們如何使用上面定義的get2下的getuser()呢?

1)在訪問函式(或常量、類名)的時候,不指定所在命名空間時,採用就近原則訪問(訪問當前命名空間下的)。

2)那麼,如何訪問指定命名空間下的內容呢?如下:

\get1\getuser(); // 訪問get1下的getuser()方法
多級命名空間及三種訪問方式

1)多級命名空間:

想象一下,如果乙個php專案檔案是乙個資料夾,而乙個資料夾下面也會有一級子資料夾,而在一級子資料夾下又有子資料夾(二級子資料夾),命名空間也是同樣的道理,乙個命名空間下,可能還有命名空間,這就是所謂的多級命名空間,例如thinkphp中:

namespace
這就是乙個多級命名空間。至於訪問方式同一般命與名空間中的一樣。

2)命名空間的三種訪問方式(和相對路徑與絕對路徑相似)

a. 非限定名稱訪問方式

b. 限定名稱訪問方式

c. 完全限定名稱訪問方式

<?php

function

getuser ()

namespace get2

function

getuser ()

getuser(); // 非限定名稱訪問方式

命名空間的引入機制

1)空間的引入:關鍵字use,注意:當移入空間後,必須要用限定名稱訪問方式訪問引入空間裡面的函式(或類、常量),不能使用非限定名稱方式訪問,這樣會訪問到當前命名空間下的函式(或類、常量)。

2)空間類元素的引入:關鍵字use。注意:只能引入類,然後可以使用非限定名稱訪問。

關於php命名空間的理解

理解命名空間首先要知道命名空間的作用,也就是它的出現解決了那些問題 官方給出的解決的問題是 使用者編寫的 與php內部的類 函式 常量或第三方類 函式 常量之間的名字衝突。為很長的識別符號名稱 通常是為了緩解第一類問題而定義的 建立乙個別名 或簡短 的名稱,提高源 的可讀性。可以看下這篇文章 從th...

php命名空間的理解

命名空間概述這是只是大概講一下用法,如果想詳細了解,還是閱讀官方手冊比較好。什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以...

對PHP命名空間的理解

最早的php是沒有命名空間的,所有php 存在同乙個命名空間之下,這樣的話就不能存在相同的類或者相同的函式。但是當我們的工程越來越大的時候,由此產生的衝突會越來越多。php5.3之後增加了對命名空間的支援,宣告命名空間名使用namespace 名稱,宣告必須在整個 之前。命名空間解決了我們多個檔案使...