thinkphp5多級命名空間

2021-08-25 19:43:19 字數 2769 閱讀 5849

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

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

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

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

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

接下來就一一詳細說明。

上面宣告的命名空間space1和space2都是單級命名空間,形如 space1\space2\space3的命名空間為多級命名空間,分隔符為\。下面介紹三種命名空間訪問方式:

<?php 

namespace name1\space1;

function getmsg()

namespace name2\space2;

function getmsg()

getmsg();

輸出結果為456;

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

<?php 

namespace name1\space1;

function getmsg()

namespace name2\space2;

function getmsg()

\name1\space1\getmsg();

輸出結果為123;

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

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

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

<?php 

namespace name1\space1;

function getmsg()

namespace name2\space2;

function getmsg()

name1\space1\getmsg();

namespace name2\space2\name1\space1;

function getmsg()

輸出為789,其實就是相當於又建立裡乙個name2\space2\name1\space1的命名空間;

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

下面舉乙個例子:

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

animal後面加兩個冒號是訪問靜態成員

輸出結果為:dog大黃;

總結:

<?php 

namespace name1\space1;

header("content-type:text/html;charset=utf-8");

class animal

function getmsg()

namespace name2\space2;

class animal

function getmsg()

$animal=new animal;

echo $animal->obj;//這個是訪問動態成員

$animal2=new \name2\space2\animal();

echo animal::$name;//訪問靜態成員

//命名空間的引用

use name1/space1;

space1\getmsg();

//類的引用

以上就是關於thinkphp中關於命名空間的全部內容,了解清楚之後就可以進行實戰開發了。

Thinkphp5命名空間和配置檔案

1.在命名空間中建立a,b,c三個php檔案。a和b立建個函式 相同的函式名 呼叫的話在a,b頭部寫上命名格式,在c檔案裡引入,引入格式為 a 函式名 2.如果建物件導向檔案,物件導向的裡面類的屬性格式是 命名空間格式 類名 函式名 配置檔案所在目錄的優先順序 1.慣例配置檔案 虛擬主機目錄 thi...

thinkPHP5專案實戰 04 命名空間的引入

1.為命名空間名稱使用別名 即在命名空間中引入其他的命名空間,使用use操作符實現。引入其他的命名空間後,使用只需在元素前面加上子命名空間的字首即可,無需寫上引入的全部空間名稱 header content type text html charset utf 8 function func con...

thinkphp命名空間

thinkphp命名規範 thinkphp 作為開發框架,有自身的一套命名規範。在基於thinkphp的開發中,應該盡可能的遵照下面命名規範 1類檔名 thinkphp使用的類庫檔案都是以.class.php為字尾,使用駝峰命名,並且首字母大寫。外部載入的類庫檔案除外。2.配置檔名 以.php為字尾...