加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php命名空间的理解

发布时间:2022-12-05 11:33:44 所属栏目:PHP教程 来源:
导读:  命名空间概述

  这是只是大概讲一下用法,如果想详细了解,还是阅读官方手册比较好。

  什么是命名空间?从广义上来说PHP命名空间,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念
  命名空间概述
 
  这是只是大概讲一下用法,如果想详细了解,还是阅读官方手册比较好。
 
  什么是命名空间?从广义上来说PHP命名空间,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
 
  版本要求
 
  php5.3.0以上,包含php5.3.0
 
  开始讲解
 
  新建a.php,b.php文件
 
  ## 这是a.php
  namespace a\b\c; // 说明这个类存在于 a\b\c 这个命名空间下
  class Apple{
      function get_func(){
          echo 'This is a';
      }
  }
  ## 这是b.php
  namespace a\b\d; // 说明这个类存在于 a\b\d 这个命名空间下
  class Apple{
      function get_func(){
          echo 'This is b';
      }
  }
  我们再新建一个test.php去调用上面这两个类
 
  ## 这是test.php
  require_once "./a.php";
  require_once "./b.php";
  // 如果没有命名空间,直接引入,会报类重复的错误
  // 那我们该如何实例化上面类呢?
  $apple_a = new a\b\c\Apple();
  echo $apple_a->get_func(); // This is a
  // 这种方法是可以的,但是试想如果我们同个页面要多次实例化此类,这样是非常耗资源的。
  ## 这是test.php
  require_once "./a.php";
  require_once "./b.php";
  use a\b\c\Apple;
  $apple_a = new Apple();
  $apple_a1 = new Apple();
  $apple_a2 = new Apple();
  echo $apple_a->get_func(); // This is a
  echo $apple_a1->get_func(); // This is a
  echo $apple_a2->get_func(); // This is a
  // 这样写同样也是可以的,而且会比上面那种方法省资源
  // 在这里思考一下,如果想执行b.php文件的类,该怎么执行呢?
  ## 这是test.php
  require_once "./a.php";
  require_once "./b.php";
  use a\b\c\Apple;
  $apple_a = new Apple();
  .....(此处省略,上面重复).....
  $apple_b = new a\b\d\Apple();
  echo $apple_b->get_func(); // This is b
  // 如果我们也像使用上面那种方法引入b.php文件的类,该如何做到呢?
  ## 这是test.php
  require_once "./a.php";
  require_once "./b.php";
  use a\b\c\Apple;
  use a\b\d\Apple as BApple; // 如果想两个同名的类一起使用,就得给它赋个新类名
  $apple_a = new Apple();
  echo $apple_a->get_func(); // This is a
  $apple_b = new BApple();
  echo $apple_b->get_func(); // This is b
  // 同样,这也成功输出了
  这时我们新建一个c.php文件
 
  ## 这是c.php
  class Apple{
      function get_func(){
          echo 'This is c';
      }
  }
  // 我们没有在这个类文件下配命名空间
  ## 这是test.php
  require_once "./a.php";
  require_once "./b.php";
  require_once "./c.php";
  use a\b\c\Apple;
  .....(此处省略,上面重复).....
  // 如果没有配命名空间,代表根类,就得这样实例化,就可以成功找到了
  $apple_c = new \Apple();
  $apple_c->get_func(); // This is c
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!