什么是命名空间?

什么是PHP命名空间?

通常命名空间是什么?

以一个例子作为一个外行人的答案会很好。


命名空间为函数和类提供了变量的作用域。 它允许您在同一程序的不同部分使用相同的函数或类名,而不会导致名称冲突。

简单来说, 把名字空间想象成一个人的姓氏 。 如果有两个人叫“约翰”,你可以用他们的姓氏来区分他们。

情景

假设您编写使用名为output()的函数的应用程序。 您的output()函数将获取页面上的所有HTML代码并将其发送给用户。

稍后,您的应用程序变得更大,并且您想添加新功能。 您添加一个库,允许您生成RSS提要。 该库还使用名为output()的函数来输出最终的提要。

在调用output() ,PHP如何知道是使用output()函数还是RSS库的output()函数? 它没有。 除非你使用命名空间。

我们如何解决有两个output()函数? 简单。 我们将每个output()函数粘贴在它自己的名称空间中。

这看起来像这样:

namespace MyProject;

function output() {
    # Output HTML page
    echo 'HTML!';
}

namespace RSSLibrary;

function output(){
    # Output RSS feed
    echo 'RSS!';
}

稍后当我们想要使用不同的功能时,我们会使用:

MyProjectoutput();
RSSLibraryoutput();

或者我们可以声明我们位于其中一个名称空间中,然后我们可以调用该名称空间的output()

namespace MyProject;

output(); # Output HTML page
RSSLibraryoutput();

没有命名空间?

如果我们没有命名空间,那么我们必须(可能)在添加库时随时更改大量代码,或者提出冗长的前缀以使我们的函数名称具有唯一性。 通过命名空间,我们可以避免在将第三方代码与我们自己的项目混合时遇到命名冲突的问题。


命名空间允许您在一个名称下面放置一堆代码,并且不会与类,函数和常量发生任何命名冲突。

它允许你的代码存在于这个名字空间中。

PHP使用有争议的字符来显示命名空间级别。 人们站起来,因为它也被用作逃跑角色。

要在PHP中使用名称空间,请在文件顶部使用类似的内容。

namespace mynamespace;

你可以在命名空间的官方PHP文档中找到更多的信息。


在其他编程语言中有像名称空间这样的技术(如Java中的包)。 他们习惯于能够在项目中使用同名的多重类。

从PHP文档(http://www.php.net/manual/en/language.namespaces.rationale.php):

什么是命名空间? 在最广泛的定义中,命名空间是封装项目的一种方式。 这在许多地方可以被看作是一个抽象的概念。 例如,在任何操作系统目录中用于分组相关文件,并充当其中文件的名称空间。 作为一个具体的例子,文件foo.txt可以存在于目录/ home / greg和/ home / other中,但是foo.txt的两个副本不能共存于同一目录中。 此外,要访问/ home / greg目录之外的foo.txt文件,我们必须使用目录分隔符将目录名添加到文件名以获取/home/greg/foo.txt。 这一原则延伸到编程世界中的命名空间。

链接地址: http://www.djcxy.com/p/9969.html

上一篇: What are namespaces?

下一篇: ('Some text') do?