27:PHP命名空间

php命名空间

命名空间概述

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。

  1. <?php
  2.  namespace  my \ name ;  // 参考 "定义命名空间" 小节
  3. class  MyClass  {}
  4. function  myfunction () {}
  5. const  MYCONST  =  1 ;
  6. $a  = new  MyClass ;
  7.  $c  = new \ my \ name \ MyClass ;  // 参考 "全局空间" 小节
  8. $a  =  strlen ( 'hi' );  // 参考 "使用命名空间:后备全局函数/常量" 小节
  9. $d  = namespace\ MYCONST ;  // 参考 "namespace操作符和__NAMESPACE__常量” 小节
  10. $d  =  __NAMESPACE__  .  '\MYCONST' ;
  11. echo  constant ( $d );  // 参考 "命名空间和动态语言特征" 小节

 

定义命名空间

虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits)、接口、函数和常量。

命名空间通过关键字namespace来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。

  1. <?php
  2.  namespace  MyProject ;
  3. const  CONNECT_OK  =  1 ;
  4. class  Connection  {  /* ... */  }
  5. function  connect () {  /* ... */   }

 

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:

  1. <html>
  2.  <?php
  3.  namespace  MyProject ;  // 致命错误 - 命名空间必须是程序脚本的第一条语句
  4.  ?>

 

定义子命名空间

与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:

  1. <?php
  2.  namespace  MyProject \ Sub \ Level ;
  3. const  CONNECT_OK  =  1 ;
  4. class  Connection  {  /* ... */  }
  5. function  connect () {  /* ... */   }

 

在同一个文件中定义多个命名空间

也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。

简单组合语法

  1. <?php
  2.  namespace  MyProject ;
  3. const  CONNECT_OK  =  1 ;
  4. class  Connection  {  /* ... */  }
  5. function  connect () {  /* ... */   }
  6. namespace  AnotherProject ;
  7. const  CONNECT_OK  =  1 ;
  8. class  Connection  {  /* ... */  }
  9. function  connect () {  /* ... */   }
  10.  ?>

 

不建议使用这种语法在单个文件中定义多个命名空间。建议使用下面的大括号形式的语法。

  1. <?php
  2.  namespace  MyProject  {
  3. const  CONNECT_OK  =  1 ;
  4. class  Connection  {  /* ... */  }
  5. function  connect () {  /* ... */   }
  6. }
  7. namespace  AnotherProject  {
  8. const  CONNECT_OK  =  1 ;
  9. class  Connection  {  /* ... */  }
  10. function  connect () {  /* ... */   }
  11. }
  12.  ?>

 

namespace关键字和__NAMESPACE__常量

PHP支持两种抽象的访问当前命名空间内部元素的方法, __NAMESPACE__ 魔术常量和namespace关键字。

常量 __NAMESPACE__ 的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。

  1. <?php
  2.  namespace  MyProject ;
  3. echo  '"' ,  __NAMESPACE__ ,  '"' ;  // 输出 "MyProject"
    A+
发布日期:2017年01月05日 14:43:40  所属分类:PHP教程
最后更新时间:2017-01-05 19:08:10
付杰
  • ¥ 298.0元
  • 市场价:398.0元
  • ¥ 199.0元
  • 市场价:299.0元
  • ¥ 79.0元
  • 市场价:99.0元
  • ¥ 99.0元
  • 市场价:199.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: