假设 有文件a.php 代码
1
2
3
4
5
6
7
8
|
<?php
class
a{
//类a
public
function
afun()
//函数afun
{
echo
"aaaa"
;
}
}
?>
|
有文件b.php 代码
1
2
3
4
5
6
7
8
|
<?php
class
a{
//类a
public
function
bfun()
//函数bfun
{
echo
"aaaa"
;
}
}
?>
|
有文件c.php 现在有如下需求
需求1:需要在c.php中调用afun()。
需求1很简单 大家都懂 把a.php文件引入进来然后实例化a对象就行,require_once('a.php');
需求2:在c.php中调用bfun()
与上面一样 require_once('b.php')就行。
需求3:在c.php中同时调用afun()与bfun()
问题来了,如果同时require文件a,php,b.php那么实例化对象时class a到底是a.php中的还是b.php的?(哪些钻牛角尖说你不会把b.php中的class a换成其他名字 请绕道!);于是为了方便管理类引入了命名空间namespace。
好下面 我们修改文件a.php b.php 代码加入命名空间!
a.php:
1
2
3
4
5
6
7
8
|
<?php
namespace
ns\a;
//定义命名空间
class
a{
//类a
public
function
afun()
//函数afun
{
echo
"aaaa"
;
}
}
?>
|
b.php:
1
2
3
4
5
6
7
8
9
|
<?php
namespace
ns\b;
//定义命名空间
class
a{
//类a
public
function
bfun()
//函数bfun
{
echo
"aaaa"
;
}
}
?>
|
于是在c.php中我们就可以引用上面定义命名空间 怎么引用?这是关键字use就出来了!
c.php:在c.php同时调用afun,bfun
1
2
3
4
5
6
7
8
9
|
<?php
require_once
(
'a.php'
);
//引入文件a.php
require_once
(
'\b.php'
);
//引入文件a.php
use
ns\a\a
as
a;
//使用命名空间ns\a中的类a 并用a替换
use
ns\b\a
as
b;
//使用命名空间ns\b中的类a 并用b替换
$a
=
new
a();
//实例化a.php 中的类a
$a
->afun();
$a
=
new
b();
//例化b.php 中的类a
$a
->bfun();
|
上面的例子应该足以说明namespace 、 use的关系