文档章节

命名空间 (一)

huangyanxiong
 huangyanxiong
发布于 2015/04/18 11:41
字数 744
阅读 19
收藏 0

 什么是命名空间?    

从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。
 例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。
 具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。
 另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。
 这个原理应用到程序设计领域就是命名空间的概念。

 

 为什么需要定义命名空间?

主要用来解决在编写类库或者应用程序时创建可重用代码类与函数的两类问题:
 1:用户编写的代码与php内部或者第三方的类库,函数,常量的命名冲突
 2:为很长的标识符定义一个别名,提高源代码的可读性

针对上面的问题举一个例子:

class Memcached{
       //...some code 
}

 

这里定义一个Memcached类当执行时给出一个致命的错误,Cannot redeclare class Memcached  不能重复声明Memcached,

因为Memcached类已经内置在PHP中,为了使程序更加容易阅读而你又不想使用其它的名称,你就可以使用命名空间,创建这个类。

namespace My_libs;
class Memcached{
	
}

 

如何定义命名空间

单个命名空间定义实例:

namespace myproject{
    const FOO = 1;
    function foo(){}
    class foo{}
}

另外也可以在一个文件中定义多个命名空间,有两种方式可以定义多个命名空间

1:使用大括号语法 :包含类,常量,函数;

namespace myproject{
    const FOO = 1;
    function foo(){}
    class foo{}
}
namespace myproject1{
    const BAR = 1;
    function bar(){}
    class bar{}
}

使用大括号语法需要的注意问题:开始的declare语句外,命名空间的括号外不得有任何PHP代码。

2:使用简单组合语法:

namespace myproject
    const FOO = 1;
    function foo(){}
    class foo{}

namespace myproject1
    const BAR = 1;
    function bar(){}
    class bar{} 

虽然可以这样使用命名空间,但官方都不见建议在一个文件中定义多个命名空间

 

总结一下定义命名空间需要注意的:

1:虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量,也就是说命名空间只能作用在类,函数,常量

2:在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:

3:不建议在一个文件中声名多个命名空间

© 著作权归作者所有

共有 人打赏支持
huangyanxiong
粉丝 15
博文 66
码字总数 28662
作品 3
程序员
私信 提问
Python名称空间是什么?python开发0基础学习

命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。 通俗讲:名称空间就是存...

zhouzhou2018
2018/05/23
0
0
卡了我一下午的问题

十分钟之前才找到这个困扰我一下午的问题的原因。 对于Linux命名空间的中文文章比较少,经常自己慢慢试,探索出一条可行之路来。 我的需求是用Linux命名空间来充当路由器,使用DNAT进行转发,...

CloudMaker
2015/03/25
657
6
简单概述PHP的命名空间及其在自动载入上的应用

php自5.3以后引入了命名空间namespace这一特性使得php在面向对象设计的过程中更加规范清晰,同时在框架的架构中自动载入模式也完全尽齐用来提高框架自身的性能--按需载入 无命名空间声明其实...

big_cat
2015/10/22
843
4
MyEclipse中XML的智能提示和关于Spring 配置文件头的一些记录和解释

一. 首先介绍XML文件的一些知识:

shengguimin
2018/06/26
0
0
TypeScript基础入门之命名空间(一)

转载 TypeScript基础入门之命名空间(一) 命名空间 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简...

durban
2018/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
今天
0
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
1
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部