PHP语言命名空间
小标 2018-07-26 来源 : 阅读 1373 评论 0

摘要:本文主要向大家介绍了PHP语言命名空间,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言命名空间,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

PHP命名空间的作用、为什么使用命名空间

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。

举个栗子:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment。之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量。这时候调用它们Comment提供的方法是很好的做法,但是同时引入各自的Comment类显然是不行的,代码会出错,在另一个地方重写任何一个Comment也会降低维护性。那这时只能重构类名,我约定了一个命名规则,在类名前面加上模块名,像这样:Article_Comment、MessageBoard_Comment

可以看到,名字变得很长,那意味着以后使用Comment的时候会写上更多的代码(至少字符多了)。并且,以后如果要对各个模块增加更多的一些整合功能,或者是互相调用,发生重名的时候就需要重构名字。当然在项目开始的时候就注意到这个问题,并规定命名规则就能很好的避免这个问题。另一个解决方法可以考虑使用命名空间。

基础 命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类(为了偷懒,我下边都将它们称为元素)的名字互不影响, 这个有点类似我们常常提到的‘封装'的概念。

创建一个命名空间需要使用namespace关键字,这样:

<?php

//创建一个名为'Article'的命名空间namespace Article;

?>

要注意的是,当前脚本文件的第一个命名空间前面不能有任何代码,下面的写法都是错误的:

//例一//在脚本前面写了一些逻辑代码

<?php

 

$path = "/";

class Comment { }

namespace Article;

?>

//例二

//在脚本前面输出了一些字符

<html></html><?php

namespace Article;

?>

为什么要说第一个命名空间呢?因为同一脚本文件中可以创建多个命名空间。

下面我创建了两个命名空间,顺便为这两个空间各自添加了一个Comment类元素:

<?php

//创建一个名为'Article'的命名空间namespace Article;

//此Comment属于Article空间的元素class Comment { }

//创建一个名为'MessageBoard'的命名空间namespace MessageBoard;

//此Comment属于MessageBoard空间的元素class Comment { }?>

在不同空间之间不可以直接调用其它元素,需要使用命名空间的语法:

<?php

namespace Article;

class Comment { }

namespace MessageBoard;

class Comment { }

//调用当前空间(MessageBoard)的Comment类

$comment = new Comment();

//调用Article空间的Comment类

$article_comment = new \Article\Comment();

?>

可以看到,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路径的语法: \空间名\元素名

除了类之外,对函数和常量的用法是一样的,下面我为两个空间创建了新的元素,并在MessageBoard空间中输出了它们的值。

<?php

namespace 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有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言PHP频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved