以下是自己读PHP手册命名空间这一节的一些笔记,还有自己上机做命名空间测试的一些整理,原创博客,有错欢迎指正:

1、命名空间声明必须是第一条语句,若没有声明命名空间的脚本,则被认为是全局空间的脚本。若某个类、函数、常量和系统自带的相应元素重名,则此时需要用命名空间区分(用户自定义的重名问题当然也需要用命名空间来区分),区分后,全局空间下的相应元素即表示系统自带元素。

2、三种名称:

(1)非限定名称:不带任何前缀的类、函数、常量名。这种引用会被解读为引用在当前命名空间中的类、函数、常量。

对于函数常量,若当前命名空间(如\ns1\ns2)找不到,则解读为引用全局空间中该名的函数或常量。

对于,若在当前命名空间中找不到该类,则尝试自动加载当前命名空间下的该类(加载\ns1\ns2\class),仍找不到则报错 。

(2)限定名称:引用的元素带了命名空间前缀(如sns\element),被解读为当前命名空间(仍例如\ns1\ns2)下的引用命名空间元素(\ns1\ns2\sns\element)。注意,限定名称规则对use无效,即在命名空间ns1中use ns2\sns;此时ns1中直接sns\element会被解释为ns2\sns\element而非ns1\sns\element(这是没use时情况)。总之涉及到use都是完全限定的。

对于函数常量,若在当前命名空间找不到,则报错,不会解读为引用全局空间元素。

对于,则尝试自动加载当前命名空间下的该限定名称类(加载\ns1\ns2\sns\element)。

(3)完全限定名称:也即包含了全局前缀(“\”)的名称,从全局空间逐层找到相应元素。在动态名称中的类、函数、常量都被解读为全局空间中的元素。

3、可以用use来引用某个命名空间下的元素(函数常量,需要先将命名空间php文件require或Include进来才能use),还可以结合as为引用的元素起一个别名。注意use中的命名空间路径被解读为完全限定的,不需要在最前面加全局操作符“\”。

注意命名空间中的require和include,比如在空间ns1中require了一个空间为ns2的php,表示在全局空间下引入了ns2这个命名空间,并不是在ns1下引入了ns2子空间,若要引入ns1下ns2的子空间,require进来的php的命名空间必须声明为ns1\ns2。也就是说namespace声明的命名空间都是完全限定名称的。

命名空间与use的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(3):命名空间

    在上一篇文章中,老周介绍了表达式和语句,尽管老周没有把所有的内容都讲一遍,但相信大伙至少已经掌握基本用法.在本文中,咱们继续探讨 CodeDom 方面的奥秘,这一次咱们聊聊命名空间. 在开始之前,老周 ...

  2. C++中的命名空间

    一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...

  3. PHP 面向对象编程和设计模式 (5/5) - PHP 命名空间的使用及名称解析规则

    PHP高级程序设计 学习笔记 2014.06.12 命名空间概述 PHP 在 5.3.0 以后的版本开始支持命名空间.什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这 ...

  4. JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

    1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...

  5. .Net 序列化(去除默认命名空间,添加编码)

    1.序列化注意事项 (1).Net 序列化是基于对象的.所以只有实例字段呗序列化.静态字段不在序列化之中. (2)枚举永远是可序列化的. 2.XML序列化时去除默认命名空间xmlns:xsd和xmln ...

  6. [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

    Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...

  7. Spring 设值注入 构造注入 p命名空间注入

    注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...

  8. python命名空间

    在"python之禅"那几句话中有一句:namespace is a good thing. python对于命名空间的处理非常简单,下面的内容不一定真实,完全是我根据现象推测出来 ...

  9. thinkphp 命名空间

    什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色.具体举个例子,文 ...

  10. 命名空间jquery

    命名空间的意思就是 同一个元素有绑定了2个相同的事件,比如2个scroll,这个时候你做其他交互的时候只想触发第二个scroll事件  就可以用命名空间做了 <button id="b ...

随机推荐

  1. centos6.5最小化安装之后装图形化界面

    查看自己系统环境 # cat /etc/issue 先要安装KDE桌面环境,执行命令: # yum groupinstall "X Window System" "KDE ...

  2. [UE4]获得特定类型的所有Actor:Get All Actors Of Class、Get All Actors with Interface、Get All Actors with Tag

  3. Redis禁用持久化功能的设置

    原文转载至:https://www.cnblogs.com/rangeon/p/7067618.html 用过Redis的朋友都知道,这玩意有个比较强大的功能叫做持久化,就是在结束服务的时候把缓存中的 ...

  4. Android 设置SeekBar不可拖动

    public class MyProgressBar extends SeekBar { /** * 是否支持拖动进度 */ private boolean touch = true; public ...

  5. PDP context

    PDP context[edit] The packet data protocol (PDP; e.g., IP, X.25, FrameRelay) context is a data struc ...

  6. 迭代器&可迭代对象

    迭代器 能够被next调用, 并不断返回值的一个对象惰性排序, 一次只获取一个数据, (占用一个空间)迭代器可以遍历无限量的数据 特点: 1.惰性序列, 节省内存 2.遍历使用next, 方向不可逆 ...

  7. Node JS 8 如何在浏览器上在线调试

    0:为何专门针对Node8写这个 从nodejs8开始,node去掉了_debugger , 内部集成了inspect , 以往使用node-inspect实现的在线调试不再可用.node8开始要用新 ...

  8. echarts学习之——电力迁徙图

    今天主要就是在搞echarts,我们都知道他为我们提供了丰富的api方法,使我们能够迅速的搭建图标.同时他里面还有许多的案例, 其中就有这么一个国内航线模拟迁徙的地图,如下所示: 而我们通常因为各种需 ...

  9. requests模块报错:Use body.encode('utf-8') if you want to send it encoded in UTF-8.

    在做 企业向微信用户个人付款  功能时,调用第三方sdk,在 进行 requests 的post请求时, 代码如下 req = requests.post(url, data=data,cert(ap ...

  10. @ResponseBody返回中文乱码

    1.在方法上修改编码 这种方式,需要对每个方法都进行配置. 2.修改springmvc的配置文件 同时注意,把这个配置写在扫描包的上面.