PHP命名空間

@PHP命名空間


例子:

namespace myself; //定義命名空間

function var_dump($a){ //命名空間下可以和系統函數重名

echo $a

}

var_dump(100); //調用的是命名空間下的函數

\var_dump(100); //調用系統函數var_dump(100);


定義:使用namespace來聲明命名空間,在namespace上面不能有任何的內容,和SESSION_START()類似.

例子:

namespace meizi;

const AAA = 1;

class Demo{

static function on(){

echo '1111';

}

function test(){

echo "2222222222222";

}

test();

\meizi\test();  //這種是絕對路徑調用和直接調用test()效果一樣.

echo \meizi\AAA;

echo \meizi\Demo::one();


命名空間的子命名空間

namespace meizi\pl;


@定義多個命名空間

namespace meizi;

namespace hello;

連續聲明命名空間,後面的hello會覆蓋前面的meizi;

語法例子:

namespace space1{

代碼段;

}

namespace space2{

代碼段;

}

在同一個文件中多個文件中,不允許在命名空間外加代碼

namespace space1{

代碼段;

}

$a = 100;  //加上這句代碼出錯

namespace space2{

代碼段;

}

這種一個文件中包括多個命名空間的寫法不建議使用.


@命名空間和動態語言特徵

function demo() {

echo '22222222222';

}

$fun = 'demo';

$fun();   //動態調用

但是上面的代碼如果包含在命名空間中則是不允許的

namespace ceshi {

function demo() {

echo '222222222';

}

$fun = 'demo';  //這樣傳值會導致下面的$fun()調用報錯

//$fun = '\ceshi\demo' 可以這樣使用

$fun();

}

但是$fun = 'ceshi\demo'這樣調用有個弊端,當命名空間改變之後就會失效. 有個__NAMESPACE__常量顯示當前命名空間的名字.所以可以更改爲$fun = __NAMESPACE__ . '\ceshi';兼容性更好.


例子

namespace ceshi\meizi\pl;

function demo() {

echo '222222222';

}

namespace\demo();

@命名空間別名

當命名空間的名字過長時,可以爲其其個別名;

例子:

namespace com\adminwang\www;

use com\adminwang\com as aw;

function demo(){

echo 'wwwwwwww';

}

aw\demo(); 

知識點: use com\adminwang\com;  等價於 use com\adminwang\com as com;


@命名空間調用函數空間外函數加\

例子:

namespace  out;

inquire "test.class.php"

//包含一個test類文件,類文件有一個one方法

//第1中調用方式,前面加一個反斜槓

\one();

//使用use導入一個全局類

use \test;     test::one();

注意: use只能導入類,函數式導入不了的.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章