zoukankan      html  css  js  c++  java
  • 命名空间

    一些关于命名空间的学习总结:

    一、概述

    具体举个例子,文件 foo.txt 可以同时在目录/home/greg/home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。

    为解决

    1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
    2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

    二、定义命名空间

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

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

    2.另外,与PHP其它的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。

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

    1.

     

    2.

    3.

     

     四:使用命名空间:基础

     类比文件系统的访问:

    1. 相对文件名形式如foo.txt。它会被解析为 currentdirectory/foo.txt,其中 currentdirectory 表示当前目录。因此如果当前目录是 /home/foo,则该文件名被解析为/home/foo/foo.txt
    2. 相对路径名形式如subdirectory/foo.txt。它会被解析为 currentdirectory/subdirectory/foo.txt
    3. 绝对路径名形式如/main/foo.txt。它会被解析为/main/foo.txt

    使用示例:

    <?php
    namespace FooBar;
    include 'file1.php';

    const FOO 2;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }

    /* 非限定名称 */
    foo(); // 解析为 FooBarfoo resolves to function FooBarfoo
    foo::staticmethod(); // 解析为类 FooBarfoo的静态方法staticmethod。resolves to class FooBarfoo, method staticmethod
    echo FOO// resolves to constant FooBarFOO

    /* 限定名称 */
    subnamespacefoo(); // 解析为函数 FooBarsubnamespacefoo
    subnamespacefoo::staticmethod(); // 解析为类 FooBarsubnamespacefoo,
                                      // 以及类的方法 staticmethod
    echo subnamespaceFOO// 解析为常量 FooBarsubnamespaceFOO
                                      
    /* 完全限定名称 */
    FooBarfoo(); // 解析为函数 FooBarfoo
    FooBarfoo::staticmethod(); // 解析为类 FooBarfoo, 以及类的方法 staticmethod
    echo FooBarFOO// 解析为常量 FooBarFOO
    ?>

     2、

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

     

    五:命名空间和动态语言特性

    略...用到再研究...

     

    六:__namespace__关键字

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

  • 相关阅读:
    Unity3d for beginners
    iOS 8 swift 键盘不出来 ios 8 uitextfield keyboard not appearing
    关于Cookie跨域的问题
    45种Javascript技巧大全
    新.Net架构必备工具列表
    .NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
    ASP.NET 大文件下载的实现思路及代码
    理解 .NET 2015
    转:我是否该放弃VB.Net?
    .net中的一般处理程序实例
  • 原文地址:https://www.cnblogs.com/John-/p/7083015.html
Copyright © 2011-2022 走看看