@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只能導入類,函數式導入不了的.