文档章节

命名空间 (一)

huangyanxiong
 huangyanxiong
发布于 2015/04/18 11:41
字数 744
阅读 18
收藏 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
粉丝 14
博文 66
码字总数 28662
作品 3
程序员
Python名称空间是什么?python开发0基础学习

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

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

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

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

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

big_cat
2015/10/22
843
4
php命名空间划重点

使用命名空间可以防止在定义常量、函数、类的时候,为了避免命名冲突而写出超长的变量名 define用于全局,使用更灵活(可以用变量、可以放到条件语句中) const用于类或者命名空间中 class内...

码上有春天
2016/12/22
13
0
PHP之命名空间

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

jjjssswww
2017/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

获取多个集合列表的笛卡尔积

获取多个集合笛卡尔积 电商中典型业务场景:商品搜索 单属性属性值之间为并查询 不同属性的属性值之间查询为与查询 import java.util.ArrayList;import java.util.List;/** * Created w...

键走偏锋
12分钟前
0
0
echarts 迁移地图 控制鼠标缩放大小比例

在网上找了好久没有找到解决方式,还是重新看了一下文档,终于找到的解决方案, zoom:1, //默认显示级别 scaleLimit:{min:1,max:3}, // 缩放级别 echarts 文档-配置项链接 http://echarts.b...

心驰
15分钟前
0
0
Boot2Docker ISO is out-of-date,

Boot2Docker ISO is out-of-date, downloading the latest release. 使用docker-machine时无法更新Boot2Docker ISO导致创建vm machine失败 解决方法:关闭网络,创建好之后再开启...

writeademo
23分钟前
0
0
在 Tomcat 中设置 Tapestry 框架的 html 热加载

如果开发中使用到了 Tapestry 这个框架,如果事先没有设置过的话,开发的时候 html 是不会热加载的,也就是说修改了 html 文件,不能刷新浏览器后立马看到修改完的效果,必须先重新启动应用服...

LeoXu
45分钟前
0
0
【微服务】开启巨石应用到微服务的探索

背景 在过去的一年时间里,我一直在从事一件事情,将现有的单体应用(巨石应用)向微服务改造。 接下来,将持续整理一些在微服务路上的学习与成长。 为什么要做微服务 单体应用,开发、部署简...

艳沐石
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部