關於PHP的命名空間,簡單粗暴易懂

2021-08-13 21:30:59 字數 2047 閱讀 7820

第乙個檔案

cat.class.php

<?php

namespace

animals\cat;

class

cat

}function

root

()?>

第二個檔案

dog.class.php

<?php

namespace

animals\dog;

class

dog

}class

cat

}function

root

()?>

index.php

第三個檔案,即載入上述命名空間的檔案

<?php

namespace

index;

require_once

'cat.class.php';

require_once

'dog.class.php';

useanimals\cat;

useanimals\dog

assnoopi;

//完全限定名

$cat1 = new \animals\cat\cat();

$cat1->speak();

echo'';

$cat2 = new \animals\dog\cat();

$cat2->speak();

echo'';

$dog1 = new \animals\dog\dog();

$dog1->speak();

echo'';

//非完全限定名

$cat3 = new cat\cat();

$cat3->speak();

echo'';

//別名 *別名和非完全限定名 不能同時使用

$dog3 = new snoopi\dog();

$dog3->speak();

//不止函式,該命名空間下的任何可用資源都可呼叫[函式、變數、常量等等]

echo snoopi\root();

echo'';

?>

命名空間類可模擬於檔案目錄系統

new 乙個命名空間的乙個類[或者函式,變數等等]即呼叫某一目錄下檔案中的內容

完全限定名 即局對路徑尋找找檔案中的內容

非完全限定名 即相當於

use 引入命名空間時 把』相對路徑』 賦值給乙個變數,該變數預設為最後一段子空間

使用 as 關鍵字可以設定該變數的名字,該變數即別名,所以別名和非完全限定名不能同時使用(因為乙個use[+as] 只能出乙個別名)。

模擬檔案目錄系統:

檔案位置: /root/path/file/filecontent;

use /root/path/file 即 fi

le=『

/roo

t/pa

th/f

ile′

所以fi

le的路

徑即為 file/filecontent

*而index.php 中的namespace index;相當於指明了當前的檔案位置

所以 如果 index.php中的檔案內容修改為

<?php

require_once

'cat.class.php';

require_once

'dog.class.php';

useanimals\cat\cat;#引入該命名空間下的類

$cat4 = new cat();

$cat4->speak();

root();

?>

use 相當於只載入了命名空間animals\cat中的cat類,而root()這個函式並沒有』載入』

所以執行會抱乙個錯誤:root()函式未宣告

關於php命名空間的理解

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

關於php的命名空間的理解

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

關於php命名空間的實戰測試

在寫php 程式是有時候會遇到下面這樣的錯誤 你的類重複定義了 這時我們就需要命名空間的幫助.但是這個命名空間和c 的命名空間有一些不同,我在測試的過程中就遇到一些問題,我把這些問題一一列出來以免以後重蹈覆轍.這是我檔案的目錄結構 ns test下有乙個資料夾和 兩個 檔案,在folder下還有乙個...