命名空间对函数和类的作用与作用域对变量的作用相同.它允许您在同一程序的不同部分使用相同的函数或类名,而不会导致名称冲突.
简而言之,think of a namespace as a person's surname.如果有两个人叫"约翰",你可以用他们的姓氏来区分他们.
假设您编写了一个使用名为output()
的函数的应用程序.output()
函数获取页面上的所有HTML代码,并将其发送给用户.
后来,你的应用程序变得越来越大,你想添加新功能.您可以添加一个库来生成RSS提要.这个库还使用一个名为output()
的函数来输出最终提要.
当您调用output()
时,PHP如何知道是使用您的output()
函数还是使用RSS库的output()
函数呢?不是的.Unless您正在使用名称空间.
我们如何解决拥有两个output()
函数的问题呢?很简单.我们把每个output()
个函数都放在它自己的namespace个函数中.
它看起来就像这样:
namespace MyProject;
function output() {
# Output HTML page
echo 'HTML!';
}
namespace RSSLibrary;
function output(){
# Output RSS feed
echo 'RSS!';
}
稍后,当我们想要使用不同的功能时,我们会使用:
\MyProject\output();
\RSSLibrary\output();
或者我们可以声明我们在其中一个名称空间中,然后我们可以称该名称空间为output()
:
namespace MyProject;
output(); # Output HTML page
\RSSLibrary\output();
如果我们没有名称空间,我们就必须(潜在地)在任何时候添加库时更改大量代码,或者想出冗长的前缀来使函数名唯一.使用名称空间,我们可以避免在将第三方代码与我们自己的项目混合时出现命名冲突的头痛问题.