小白教程

 找回密码
 立即注册
小白教程 首页 系列教程 PHP系列教程 查看内容

PHP 命名空间

发布者: 小白教程



子命名空间

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

  1. <?php
    namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
  2. const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function Connect() { /* ... */  }
    ?>

上面的例子创建了常量 MyProject\Sub\Level\CONNECT_OK,类 MyProject\Sub\Level\Connection 和函数 MyProject\Sub\Level\Connect。


命名空间使用

PHP 命名空间中的类名可以通过三种方式引用:

  1. 非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。

  2. 限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。

  3. 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。

下面是一个使用这三种方式的实例:

file1.php 文件代码

  1. <?php
  2. namespace Foo\Bar\subnamespace;
  3. const FOO = 1;
  4. function foo() {}
  5. class foo
  6. {
  7. static function staticmethod() {}
  8. }
  9. ?>

file2.php 文件代码

  1. <?php
  2. namespace Foo\Bar;
  3. include 'file1.php';
  4. const FOO = 2;
  5. function foo() {}
  6. class foo
  7. {
  8. static function staticmethod() {}
  9. }
  10. /* 非限定名称 */
  11. foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
  12. foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。resolves to class Foo\Bar\foo, method staticmethod
  13. echo FOO; // resolves to constant Foo\Bar\FOO
  14. /* 限定名称 */
  15. subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
  16. subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
  17. // 以及类的方法 staticmethod
  18. echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
  19. /* 完全限定名称 */
  20. \Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
  21. \Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
  22. echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
  23. ?>

注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 \strlen() 或 \Exception 或 \INI_ALL。

在命名空间内部访问全局类、函数和常量:

  1. <?php
  2. namespace Foo;
  3. function strlen() {}
  4. const INI_ALL = 3;
  5. class Exception {}
  6. $a = \strlen('hi'); // 调用全局函数strlen
  7. $b = \INI_ALL; // 访问全局常量 INI_ALL
  8. $c = new \Exception('error'); // 实例化全局类 Exception
  9. ?>


上一篇:PHP 魔术常量下一篇:PHP 面向对象

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-11-24 15:03 , Processed in 0.013826 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部