【PHP高级特性】命名空间

1、命名空间:PHP5.3.0开始,增加namespace命令空间特性。

命名空间将代码划分出不同的区域,不同空间的相同常量名、函数、类互不影响。
同一个PHP文件中可以创建多个命名空间。但是规范一个文件只写一个命名空间。
//命名空间代码写在php代码开始处。
//创建一个名为:Home\Controller的命名空间
//表示Home目录下的Controller命名空间,一个Controller命名空间下可以有若干个类
 
namespace Home\Controller;

2、调用不同命名空间的方法

1:采用完全限定名称
例如:分别定义两个命名空间(可以定义在相同文件中,也可以定义在不同文件中)
//当前MessageBoard命名空间中存在Comment类
namespaceMessageBoard;
classComment{}
 
//另一个Article命名空间中存在Comment类
namespaceArticle;
classComment{}
 
------------------------------------------
 
/* 调用方法 */
//调用当前空间(MessageBoard)的Comment类(非限定名称、直接调用类名)
$comment =newComment();
//调用Article空间的Comment类(完全限定名称、调用绝对路径下的类名)【常用于调用自身类库】
$article_comment =new \Article\Comment();
2:采用use导入命名空间(常用)
//创建一个BBS命名空间
namespace BBS;
//导入另一个命名空间(use 命名空间名\类名)(as 表示别名)
useBlog\Article as List;
 
//导入其他命名空间后调用其他命名空间的类(限定名称、调用相对路径)【常用于调用自身类库】
$article_comment =new List();
注意:导入命名空间的时候,如果当前空间与导入的命名空间有相同的名字元素会发生致命错误。
 
4、调用第三方类库【常用于调用第三方类库】
function open() {    include "./ThinkPHP/Library/img/Image.php"; // 引入第三方类库
$image = new \Image(); // 实例化类名
$image->open('./1.jpg'); //使用类中的方法 }
 
附:非限定名称、限定名称、完全限定名称
1.非限定名称,或不包含前缀的类名称,例如 $comment =newComment();。如果当前命名空间是Blog\Article,Comment将被解析为Blog\Article\Comment。
如果使用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。

2.限定名称,或包含前缀的名称,例如 $comment =newArticle\Comment();。如果当前的命名空间是Blog,则Comment会被解析为Blog\Article\Comment。
如果使用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。

3.完全限定名称,或包含了全局前缀操作符的名称,例如 $comment =new \Article\Comment();。在这种情况下,Comment总是被解析为代码中的文字名(literal name)Article\Comment。 非限定名称 = 文件名 限定名称 = 相对路径 完全限定名称 = 绝对路径 没有定义命名空间的文件都属于公共空间。

 

 

 

posted @ 2018-09-28 11:20  PHPer_Cody  阅读(169)  评论(0)    收藏  举报