- 相关推荐
PHP中的命名空间的技巧讲解
PHP对于命名空间的支持,经历了一段艰难的旅程。幸运的是,PHP从5.3开始引入了命名空间。自从PHP引入了命名空间,PHP代码的适用结构也得到了大大的改善。许多编程语言早就有了命名空间的概念,相对于其他语言来说,PHP对于命名空间的支持,稍微有点晚了。不管如何,每一种新特性的引入都有其目的,和其他语言一样,PHP引入命名空间也主要是为了解决名字冲突的问题。
命名空间(namespace)的概念
代码如下:
当在字符串中使用命名空间名字的时候,一定不要忘了转义
可以将命名空间想象成一个抽屉,你可以在抽屉里放入铅笔、尺子、A4纸等,这些都是你自己的私有物品。在你的抽屉下面是别人的抽屉,别人也可以在抽屉里放入相同的物品。为了不拿错物品,你们决定在自己的抽屉上贴上标签,这样就可以清晰的看到某个物品是属于谁的了。
之前,开发者必须在类、函数和常量中添加下划线,用来使自己的代码独立其他于代码库。这相当于所有人都给自己的物品贴上标签之后,一起放入了一个更大的抽屉里。尽管这也是一种组织代码的方式,但是这种方式是非常低效的。
命名空间的到来就是为了解决这个问题。我们可以在不同的命名空间里声明相同的函数、类和常量,而不会造成名字上的冲突。本质上,命名空间无非是一种分等级标记PHP代码的方式。
正在使用命名空间
有一点需要注意的是,我们正在间接的使用命名空间。从PHP 5.3开始,所有在非用户定义的命名空间中的声明(类、函数、常量),都默认的属于全局命名空间。
全局命名空间中包含了所有PHP内部的定义,如echo()、mysqli_connect()和Exception类。由于全局命名空间并没有独立的标识名,所以它经常被成为全局空间(global space)。
定义命名空间
命名空间的定义必须是PHP文件的第一条语句。唯一允许在定义命名空间之前使用的语句是declare语句。
定义命名空间很简单,只需要使用关键字namespace即可。命名空间的名字需要遵循PHP文件中其他标识符的命名规则。
下面是定义一个命名空间的示例:
代码如下:
namespace MyNamespace{
class Test{
}
}
如果想定义一个属于全局空间的代码块,也是使用namespace关键字,但是后面不加命名空间的名字,如下:
代码如下:
namespace {
class Test{
}
}
我们甚至可以在一个文件中定义多个命名空间,如下:
代码如下:
namespace MyNamespace {
}
namespace MySecondNamespace {
}
namespace {
}
我们也可以将一个命名空间分散在不同的文件中,文件包含的处理程序会自动合并他们。因此,限制大量的命名空间在同一个文件中定义是一个很好的编程实践,就像我们通常单独为每个类定义一个单独的文件一样。
复制代码 代码如下:
有一点需要注意的是,包含命名空间代码块的{是可选的,可以用也可以不用。事实上,只要我们坚持在一个文件中只定义一个命名空间,那么我们就可以完全省略{,这样也可以使我们的代码看起来更加简洁。
子命名空间
命名空间可以遵循一个特定的层级,就像我们电脑文件系统中得目录一样。子命名空间对于将一个项目结构化尤其特别有用。例如,你的项目需要访问数据库,你可能会想将所有数据库相关的代码(如数据库异常处理等)放在同一个子目录下。
为了保持灵活性,将子命名空间放在子目录中是非常明智的做法。这会使你的代码结构更清晰,而且会使遵循PSR-0标准的autoloaders的使用变得更容易。
PHP使用反斜线作为命名空间的分隔符,有趣的是,PHP甚至考虑过使用笑脸:)作为命名空间的分隔符。
子命名空间定义示例:
代码如下:
namespace MyProjectDatabase
class Connection {
}
可以使用尽可能多的子命名空间:
代码如下:
namespace MyProjectBlogAuthHandlerSocial;
class Twitter {
}
有一点需要注意的是,PHP并不支持命名空间的嵌套定义,下面的代码会导致一个致命错误:Namespace declarations cannot be nested。
【PHP中的命名空间的技巧讲解】相关文章:
高尔夫技巧讲解11-15
导游讲解技巧04-09
吉他入门技巧讲解01-12
导游演讲技巧带团讲解02-11
网球接发球的技巧讲解11-07
英语六级听力应试技巧讲解09-05
演讲中的转折技巧07-22
高中英语语法:就近原则讲解技巧09-12
在PHP7中不要做的10件事09-06
插花作品的命名方法12-26