關于php命名空間的實戰測試
來源:程序員人生 發布時間:2015-05-22 08:00:29 閱讀次數:3960次
在寫php 程序是有時候會遇到下面這樣的毛病: (你的類重復定義了); 這時候我們就需要命名空間的幫助.
但是這個命名空間和c++的命名空間有1些不同, 我在測試的進程中就遇到1些問題,我把這些問題逐一列出來以避免以后重蹈復轍.
這是我文件的目錄結構 : ns_test下有1個文件夾和 兩個 文件, 在folder下還有1個class3.php的文件

下面是class1.php中的代碼:
<span style="font-size:12px;"><?
namespace ns1s1; //使用命名空間ns1s1 下面的所有類都在該命名空間中
$path= dirname(__FILE__)."/"; //取得文件所在的文件夾路徑
$path=str_replace('','/',$path);
//echo $path."class1.php"."<br>";
require_once($path."folder/class3.php");
class c1{
function say()
{
echo "命名空間:ns1s1: c1 say()<br>";
}
}
class comm_cls{
function say()
{
echo "命名空間:ns1s1: comm_cls say() <br>";
}
}
function test()
{
echo "命名空間:ns1s1 :test() <br>";
}
?></span>
下面是class2.php中的代碼:
<span style="font-size:12px;"><?
header("Content-type: text/html; charset=utf⑻");
//namespace ns1s1; //有重復的類 在開始聲明命名空間的話 該文件下面的所有類和函數就都屬于該命名空間
//不聲明命名空間 默許就是全局的
$path= dirname(__FILE__)."/"; //取得文件所在的文件夾路徑
$path=str_replace('','/',$path);
//echo $path."class1.php"."<br>";
require_once($path."class1.php");
class c2{
function say()
{
echo "全局 :c2 say() <br>";
}
}
// 有命名空間的隔離就能夠在不同的命名空間中定義相同的類名的類
class comm_cls{
function say()
{
echo "全局: comm_cls say() <br>";
}
}
use ns1s1 as s2; //定義別名
$t1=new ns1s1c1(); //使用完全的命名空間
$t1->say();
s2 est();
$t3=new s2comm_cls(); //使用命名空間的別名
$t3->say();
$t5=new s2c3();
$t5->say();
// s2 est();寫法有問題 即在s2前加''有問題
$t2=new c2();
$t2->say();
$t4=new comm_cls();
$t4->say();
//namespace ns1s1; 命名空間應當在代碼的最開始聲明
?></span>
下面是class3.php中的代碼:
<span style="font-size:12px;"><?
namespace ns1s1; //使用和class1.php 中1樣的命名空間
class c3{
function say()
{
echo "命名空間:nsas1: c3 say()<br>";
}
}
//如果定義下面的類的話 就會出現重定義毛病
// class comm_cls{
// function say()
// {
// echo "s1: c2 say() <br>";
// }
// }
// function test()
// {
// echo "s1 :test() <br>";
// }
?></span>
測試 : 在閱讀器中打開class2.php

實際使用

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈