什么是命名空间?
命名空间是为了把一些类和类的实例更好地管理而定义的把这些类和实体集合起来的一个团体,它是_Namespace system class的一个实例,或者是_Namespace类的一个派生类,_Namespace类只有一个属性:Name。通过这个属性用户可以把某个命名空间和其他的命名空间分开来,注意命名空间的Name不能包括头缀和后缀的下划线。命名空间可以相互联系和组织成一个具有任意层次的由类和类的实例组成的网状结构,这种结构有点象文件系统的树状结构,在同一个层次的情况下,命名空间必须具有互异的名称。
为了表示它们的层次结构你可以用右下线表示这种关系,如下:
Namespace1\Namespace2\Namespace3.....\LastNamespace
虽然说这些命名空间可以表示成这样的层次结构,但是,这些命名空间之间没有类的继承关系,也就是说,子的命名空间中的类不会自动继承父的命名空间中的类。
通常情况下,一个命名空间包含了在某种环境下一系列的类和类的实例。
举个简单的实例啊,今天刚做了下,稍微了解了下,见笑了:
在根目录下建立四个.php类文件(a.php,b,php,c.php,index.php)
a.php (其中 a\b\c 是你的命名空间,最好是根据所在文件夹来命名比较规范)
b.php
c.php(它是一个全局类,所以开头没有设置命名空间)
index.php(其中调用c.php类文件的时候,用 \ 来调用,因为c.php是全局类)
php自5.3.0开始,引入了一个namespace关键字以及__NAMESPACE__魔术常量(当然use关键字或use as嵌套语句也同时引入);那么什么是命名空间呢?php官网已很明确的进行了定义并形象化解释,这里直接从php官网copy一段文字[来源]。
“什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。”
目前php5.5系列早已推出,php的面向对象编程思想也在逐渐的完善,而本文要学习的namespace关键字的引入就是为了解决php面向对象编程过程中已出现的各种“麻烦”;具体麻烦如下:
1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2、为了缓解麻烦1,通常编写各种class时会使用较长的类名或为实现不同功能的class添加名称前缀(或后缀)。
3、不使用魔法函数__autoload的情况下,而每个class又独占一个php文件时,为了调用不同的class,会在使用这些class的另外的php文件的开头位置书写较多的include(或require或require_once)语句。
在这里给大家扩展一下:
//一般用于网络协议中,比如最常用的HTTP://就是超文本传输协议,//一般都用协议名+冒号+//表示,如FTP:// MMS://等等。
\\一般用于局域网中计算机之间的互访,也就是说它后面加一个IP或者机器名,可以访问另一台机器。
在WINDOWS里面很多情况下/和\是可以通用的,也就是说不管你输什么都可以达到相同的目的,尤其是在地址栏中。但是,正规的地址表示还是应该用/,比如C:/WINDOWS等。
\一般在WINDOWS中比较少用。
希望对大家有用!!!