文档章节

命名空间 (一)

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
粉丝 15
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
12分钟前
0
0
JavaScript使用原型判断对象类型

1. constructor属性 在JavaScript创建对象(二)——构造函数模式中,我们说过可以使用对象的constructor属性判断对象的类型:p1.constructor === Person,可能当时就有细心的读者会想,我们...

Bob2100
14分钟前
0
0
10-《深度拆解JVM》JVM是怎么实现invokedynamic的?(下)

一、问题引入 上回讲到,为了让所有的动物都能参加赛马,Java 7 引入了 invokedynamic 机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解 invokedynamic,而是深入地探讨了它所依赖...

飞鱼说编程
34分钟前
2
0
457. Circular Array Loop

Description Difficulty : Medium You are given an array of positive and negative integers. If a number n at an index is positive, then move forward n steps. Conversely, if it's n......

52iSilence7
50分钟前
1
0
MySQL SQL 常见用法

某字段重复记录 select a.fieldA from tableA a group by a.fieldA having count(a.fieldA)>1;==select * from (select a.fieldA, count(1) as faCount from tableA a group......

园领T
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部