首页 > 代码库 > PHP命名空间

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只能导入类,函数式导入不了的.




PHP命名空间