假设 有文件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对象就行,('a.php');
需求2:在c.php中调用bfun()
与上面一样 ('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的关系