命名空间一个最明确的目的就是解决重名问题,php中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。
(推荐教程:php视频教程)
命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类(为了偷懒,我下边都将它们称为元素)的名字互不影响, 这个有点类似我们常常提到的'封装'的概念。
创建一个命名空间需要使用namespace关键字,这样:
<?php//创建一个名为'article'的命名空间namespace article;?>
要注意的是,当前脚本文件的第一个命名空间前面不能有任何代码,下面的写法都是错误的:
例一
//在脚本前面写了一些逻辑代码<?php$path = "/";class comment { }namespace article;?>
例二
</html><?phpnamespace article;?>
为什么要说第一个命名空间呢?因为同一脚本文件中可以创建多个命名空间。
下面我创建了两个命名空间,顺便为这两个空间各自添加了一个comment类元素:
<?php//创建一个名为'article'的命名空间namespace article;//此comment属于article空间的元素class comment {}//创建一个名为'messageboard'的命名空间namespace messageboard;//此comment属于messageboard空间的元素class comment {}?>
在不同空间之间不可以直接调用其它元素,需要使用命名空间的语法:
<?phpnamespace article;class comment {}namespace messageboard;class comment {}//调用当前空间(messageboard)的comment类$comment = new comment();//调用article空间的comment类$article_comment = new \article\comment();?>
可以看到,在messageboard空间中调用article空间里的comment类时,使用了一种像文件路径的语法: \空间名\元素名
除了类之外,对函数和常量的用法是一样的,下面我为两个空间创建了新的元素,并在messageboard空间中输出了它们的值。
<?phpnamespace article;const path = '/article';function getcommenttotal() { return 100;}class comment {}namespace messageboard;const path = '/message_board';function getcommenttotal() { return 300;}class comment {}//调用当前空间的常量、函数和类echo path;///message_boardecho getcommenttotal();//300$comment = new comment();//调用article空间的常量、函数和类echo \article\path;///articleecho \article\getcommenttotal();//100$article_comment = new \article\comment();?>
然后我的确得到了article空间的元素数据。
相关推荐:php培训
以上就是php namespace的用法的详细内容。
