[关闭]
@1kbfree 2018-05-09T00:29:55.000000Z 字数 1343 阅读 1220

namespace命名空间

PHP


namespace是命名空间,那什么是命名空间呢,我打个比方,一个教师里有2个人都叫iamfree,那么当老师喊iamfree的时候,不知道是喊哪个,所以会混乱,为了方便,我们把2个iamfree分到a班和b班,这样的原理就是命名空间,在一个代码中,如果存在相同的函数或类,我们可以用命名空间来分开它们,俗话说一山不容二虎对吧~

  1. <?php
  2. /**
  3. * @Author: iamfree
  4. * @Date: 2018-05-07 21:25:26
  5. * @Last Modified by: iamfree
  6. * @Last Modified time: 2018-05-07 21:26:49
  7. */
  8. namespace a; //声明命名空间a
  9. function echo_name($name){
  10. echo '老师在喊a班的'.$name;
  11. }
  12. echo_name('iamfree'); //调用此空间里的echo_name()
  13. echo "<br />";
  14. namespace b; //声明命名空间a
  15. function echo_name($name){
  16. echo '老师在喊b班的'.$name;
  17. }
  18. echo_name('iamfree'); //调用此空间里的echo_name()
  19. echo "<meta charset='utf-8'>";//设置为utf-8编码
  20. ?>

image_1cctd0lgp9665mv1lvfrr95nk9.png-47.1kB

注意

在b命名空间访问a命名空间里的echo_name()

  1. <?php
  2. /**
  3. * @Author: iamfree
  4. * @Date: 2018-05-07 21:25:26
  5. * @Last Modified by: iamfree
  6. * @Last Modified time: 2018-05-07 21:26:49
  7. */
  8. namespace a;
  9. function echo_name($name){
  10. echo '老师在喊a班的'.$name;
  11. }
  12. namespace b;
  13. function echo_name($name){
  14. echo '老师在喊b班的'.$name;
  15. }
  16. \a\echo_name('iamfree'); \\想成是进入a班级去喊a班级里的iamfree
  17. echo "<meta charset='utf-8'>";
  18. ?>

image_1cctdll1r1pif3l0i0t1rjrt8um.png-53.6kB

深入学习命名空间

命名空间三种访问方式:

  1. 非限定名称访问方式
  2. 限定名称访问方式
  3. 完全限定名称访问方式

先讲完全限定名称访问方式:

image_1cctg7lqrfiadlg1tpg1b0o35v13.png-97.7kB
\a\echo_name('iamfree')就是完全限定名称访问方式,也可以想成是绝对路径

非限定名称访问方式:

image_1cctgk4l0k5s199gtq315a17es1g.png-73.4kB

限定名称访问方式:

image_1ccthbqif11qt1ubm1o2u19ri18p32a.png-61kB

调用类也一样

image_1cctjmug11bs5asbbjib7n1q792n.png-123kB

另一种方法可以调用其他命名空间的类

image_1cctkvthu1q4v1convf11jfi4ob3k.png-120.8kB

那么当我们的多级命名空间多了的话怎么办,比如namespace a\b\c\d\e难道我们就要这样调用那个命名空间里的内容吗,这显然太麻烦了,那我们可以引入空间,下面我来演示一下

引入命名空间

image_1cctlei6m1b3hho01cbge0mji541.png-104.8kB

正确的调用引入的命名空间的函数:
image_1cctlfr531ig1u118hf1apv1m3o4e.png-80.1kB

那么这里还是要用限定名称才可以调用引入的命名空间里的内容,我们有没有什么更简单的方法呢,答案是有的,就是把命名空间里的类直接引入过来,下面来演示一下。

引入命名空间的类

image_1cctltm1vet268rf02mu45lq4r.png-84.4kB

注意:只能引入类

在很多框架里就是利用这个来引入类的~
比如ThinkPHP:
image_1cctm94cuae14rl1b1gq38v0e58.png-422.5kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注