小白教程

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

PHP 命名空间

发布者: 小白教程

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。

PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物。 不过在PHP当中还是有着相当重要的意义。

PHP 命名空间可以解决以下两类问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。接下来,我们一起来看看 PHP 命名空间的相关知识!

定义命名空间

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

命名空间通过关键字 namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。语法格式如下;

  1. < ?php  
  2. // 定义代码在 'MyProject' 命名空间中  
  3. namespace MyProject;  
  4.  
  5. // ... 代码 ...

你也可以在同一个文件中定义不同的命名空间代码,如:

  1. < ?php  
  2. namespace MyProject1;  
  3. // MyProject1 命名空间中的PHP代码  
  4.  
  5. namespace MyProject2;  
  6. // MyProject2 命名空间中的PHP代码    
  7.  
  8. // 另一种语法
  9. namespace MyProject3 {  
  10.  // MyProject3 命名空间中的PHP代码    
  11. }  
  12. ?>

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

  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 语句加上大括号括起来,例如:

  1. <?php
  2. namespace MyProject {
  3. const CONNECT_OK = 1;
  4. class Connection { /* ... */ }
  5. function connect() { /* ... */ }
  6. }
  7. namespace { // 全局代码
  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 {

    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
    }

    namespace { // 全局代码
    session_start();
    $a = MyProject\connect();
    echo MyProject\Connection::start();
    }
    ?>

以下代码会出现语法错误:

  1. <html>
    <?php
    namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
    ?>


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

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

GMT+8, 2024-9-19 12:18 , Processed in 0.048502 second(s), 18 queries .

Powered by Discuz! X3.4

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

返回顶部