[关闭]
@Chiang 2020-01-09T18:45:06.000000Z 字数 1047 阅读 1929

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

PHP


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

  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. ?>
  • 在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。
  • 将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来,例如:
  1. <?php
  2. namespace MyProject {
  3. const CONNECT_OK = 1;
  4. class Connection { /* ... */ }
  5. function connect() { /* ... */ }
  6. }
  7. namespace { // global code
  8. session_start();
  9. $a = MyProject\connect();
  10. echo MyProject\Connection::start();
  11. }
  12. ?>

除了开始的declare语句外,命名空间的括号外不得有任何PHP代码。

  1. <?php
  2. declare(encoding='UTF-8');
  3. namespace MyProject {
  4. const CONNECT_OK = 1;
  5. class Connection { /* ... */ }
  6. function connect() { /* ... */ }
  7. }
  8. namespace { // 全局代码
  9. session_start();
  10. $a = MyProject\connect();
  11. echo MyProject\Connection::start();
  12. }
  13. ?>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注