在寫php 程式是有時候會遇到下面這樣的錯誤: (你的類重複定義了); 這時我們就需要命名空間的幫助.
但是這個命名空間和c++的命名空間有一些不同, 我在測試的過程中就遇到一些問題,我把這些問題一一列出來以免以後重蹈覆轍.
這是我檔案的目錄結構 : ns_test下有乙個資料夾和 兩個 檔案, 在folder下還有乙個class3.php的檔案
下面是class1.php中的**:
namespace ns1\s1; //使用命名空間ns1\s1 下面的所有類都在該命名空間中
$path= dirname(__file__)."/"; //獲得檔案所在的資料夾路徑
$path=str_replace('\\','/',$path);
//echo $path."class1.php"."
"; require_once($path."folder/class3.php");
class c1
}class comm_cls }
function test()
?>
下面是class2.php中的**:
header("content-type: text/html; charset=utf-8");
//namespace ns1\s1; //有重複的類 在開始宣告命名空間的話 該檔案下面的所有類和函式就都屬於該命名空間
//不宣告命名空間 預設就是全域性的
$path= dirname(__file__)."/"; //獲得檔案所在的資料夾路徑
$path=str_replace('\\','/',$path);
//echo $path."class1.php"."
";
require_once($path."class1.php");
class c2
}// 有命名空間的隔離就可以在不同的命名空間中定義相同的類名的類
class comm_cls
}use ns1\s1 as s2; //定義別名
$t1=new ns1\s1\c1(); //使用完整的命名空間
$t1->say();
s2\test();
$t3=new s2\comm_cls(); //使用命名空間的別名
$t3->say();
$t5=new s2\c3();
$t5->say();
// \s2\test();寫法有問題 即在s2前加'\'有問題
$t2=new c2();
$t2->say();
$t4=new comm_cls();
$t4->say();
//namespace ns1\s1; 命名空間應該在**的最開始宣告
?>
下面是class3.php中的**:
namespace ns1\s1; //使用和class1.php 中一樣的命名空間
class c3
}//如果定義下面的類的話 就會出現重定義錯誤
// class comm_cls
// }
// function test()
// ?>
測試 : 在瀏覽器中開啟class2.php
實際使用
關於php命名空間的理解
理解命名空間首先要知道命名空間的作用,也就是它的出現解決了那些問題 官方給出的解決的問題是 使用者編寫的 與php內部的類 函式 常量或第三方類 函式 常量之間的名字衝突。為很長的識別符號名稱 通常是為了緩解第一類問題而定義的 建立乙個別名 或簡短 的名稱,提高源 的可讀性。可以看下這篇文章 從th...
關於php的命名空間的理解
什麼是命名空間以及如何定義命名空間 一般情況向,在乙個php程式源 檔案或同乙個請求中是不允許有兩個以上相同名稱的類名 常量名或者函式名的,這樣的話,程式在執行的時候就會報錯。但是,在很多實際情況下,我們是無法避免在同乙個檔案下有兩個以上相同名稱的類名 常量名或者函式名的。這種情況下就需要引入命名空...
php 命名空間,PHP使用命名空間
介紹 命名空間中的類,函式或常量可以通過以下方式使用 在當前命名空間中使用類 指定相對於當前命名空間的命名空間 提供命名空間的全限定名稱 從當前命名空間 在此示例中,從test1.php載入了命名空間。沒有命名空間引用的函式或類名稱將訪問當前命名空間中的功能或類名稱 示例 test1.php nam...