namespace即“命名空间”,也称“名称空间” 、”名字空间”。如果两个人写的库文件中出现同名的变量或函数(不可避免)
,使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念。
命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体
分别放在各个命名空间中,从而与其他全局实体分隔开来。
命名空间的作用:是建立一些互相分隔的作用域,把一些全局实体分隔开来。
命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是人们设立若干子目录,
把文件分别放到不同的子目录中,不同子目录中的文件可以同名。调用文件时应指出文件路径。
如以下例子,在同一个文件中将两个同名方法分别放在两个命名空间中,类似将两个同名文件放在两个不同的目录下,
namespace aaa;
function a(){
echo "a-a";
}
namespace b;
function a(){
echo 'b-a';
}
以下为调用各个命名空间中的元素的方法:
\aaa\a();//调用aaa命名空间中的方法a;调用不同命名空间中的方法:\命名空间名\方法名();
use aaa as acd;
acd\a();//调用aaa命名空间中的方法a;
echo '<br/>';
//use b;
a();//调用b命名空间中的方法a;
echo '<br/>';
use aaa;
aaa\a();//调用aaa命名空间中的方法a;
当两个不同的文档使用相同的元素名时,就会发生命名冲突。命名空间可以避免这个问题,例如
a.php
namespace think;
class a{
public function b(){
echo 'think-a-b';
}
}
b.php
namespace think2;
class a{
public function b(){
echo 'think2-a-b';
}
}
c.php
require 'a.php';
require 'b.php';
use think\a;
$obj_a=new a();
$obj_a->b();
echo '<br/>';
use think2\a as b;
$obj_b=new b();
$obj_b->b();