php中的命名空间namespace

==============================================
     php中的命名空间namespace
==============================================


一、命名空间概述:
    什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。
    例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。
    具体举个例子,如文件foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。
    另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。
    这个原理应用到程序设计领域就是命名空间的概念。 
    
    
二、定义命名空间:
    1. 虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。 
    2. 命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
    实例:
        <?php
            namespace MyProject;


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


        ?>
      
     (了解)在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。declare(encoding='ISO-8859-1');


三、定义子命名空间:
    1. 与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义: 
    
        <?php
            namespace MyProject\Sub\Level;


            const CONNECT_OK = 1;
            class Connection { /* ... */ }
            function connect() { /* ... */  }
        ?>
        
四、在同一个文件中定义多个命名空间(不推荐):
    1. 也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。     
        <?php
        namespace MyProject;


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


        namespace AnotherProject;


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


     2. 不建议使用上面实例1的这种语法在单个文件中定义多个命名空间。建议使用下面的大括号形式的语法。
        在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。
            <?php
            namespace MyProject {


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


            namespace AnotherProject {


            const CONNECT_OK = 1;
            class Connection { /* ... */ }
            function connect() { /* ... */  }
            }
            
            //不包含在命名空间中的代码
            namespace { // 全局代码
            session_start();
            $a = MyProject\connect();
            echo MyProject\Connection::start();
            }
            ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值