第乙個檔案
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下還有乙個...