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