在PHP中,函数、类和常量都是不允许同名的,一旦同名就会呈现过错。可是在大型项目开发中,不同团队负责的模块或许不同,那么就很难防止呈现同名结构,所以“命名空间”就产生了,“命名空间”确保了即使呈现了同名结构,也不会影响到整个项目。
一、命名空间界说:命名空间是指人为的将内存进行分隔,让不同内存区域的同名结构共存。从而解决在大型本项目中或许呈现的重名结构问题。
二、命名空间语法:namespace+空间名字
三、命名空间的拜访办法
非限制称号拜访:成员前面不能有任何的命名空间,不能有“”,了解成文件当时路径,如:echoHuman::PERSON_NAME。
限制称号拜访:成员称号前面至少要有一个命名空间,至少要有一个反斜线“”,且不能在首位,了解成相对路径。限制称号的拜访是基于子空间来完成的,如echospace2Human::PERSON_NAME。
彻底限制称号拜访:这个拜访方法是默认的,用的最多的。拜访总是从根空间(即大局空间)开端拜访,榜首个字符一定是反斜线(“”),能够将彻底限制称号拜访了解成绝对路径,运用“”作为大局空间开端符号。如echospace3Human::PERSON_NAME。
代码举例:
namespacespace1;
echo__NAMESPACE__.’
‘;
classHuman
{
constPERSON_NAME=’王小丁’;
}
//1.非限制称号
echoHuman::PERSON_NAME;
echo’
‘;
//2.限制称号
namespacespace;
echospace2Human::PERSON_NAME.’
‘;
namespacespacespace2;
echo__NAMESPACE__.’
‘;
classHuman
{
constPERSON_NAME=’王小丁’;
}
//3.彻底限制称号(默认的,用的最多的)
echo’
‘;
namespacespace3;
echo__NAMESPACE__.’
‘;
classHuman
{
constPERSON_NAME=’王小丁’;
}
echospace3Human::PERSON_NAME;
输出作用:
四、命名空间的别号与类别号
PHP命名空间支撑有两种运用别号或导入方法:为类称号运用别号,或为命名空间称号运用别号。
代码举例:
//1.命名空间的别号
namespacemyspace1;
classC1
{
//…
}
echomyspace2C2::index(),’
‘;
echomyspace2C3::cate(),’
‘;
namespacemyspace2;
classC2
{
publicstaticfunctionindex()
{
return’主页’;
}
}
classC3
{
publicstaticfunctioncate()
{
return’频道页’;
}
}
namespacemyspace3;
//use用来声明空间别号,use默认就是从根空间开端
//给外部的空间起了一个别号,myspace2===>s
usemyspace2ass;
echosC2::index(),’
‘;
echosC3::cate(),’
‘;
//2.类级的别号
//给外部空间中的类,起一个别号
//usemyspace2C2asC2;
//usemyspace2C3asC3;
//echoC2::index(),’
‘;
//echoC3::cate(),’
‘;
//类别号与原始类名相同,此时能够省掉类别号,虽然能够这样运用,可是主张起上名字
//usemyspace2C2;
//因为当时类中与有一个与之抵触的类名C2
usemyspace2C2asC;
usemyspace2C3;
echoC2::index(),’
‘;
echoC::index(),’
‘;
echoC3::cate(),’
‘;
classC2
{
publicstaticfunctionindex()
{
return’主页NS-T2’;
}
}
输出作用:
五、类文件的主动加载
如果想完成主动加载,需求满足两个条件
1.命名空间有必要和类文件所在的绝对路径一一对应
2.当时类称号与当时的类文件的称号彻底一致
//封装主动加载器
//需求在同一路径下创立一个或许几个php文件,且需求创立一个autoload.php文件来作引进桥梁
require’autoload.php’;
echo’
‘;
useinclibDemo1;
useinclibDemo2;
useinclibDemo3;
echoDemo1::say(),’
‘;
echo’
‘;
echoDemo2::say(),’
‘;
echo’
‘;
echoDemo3::say(),’
‘;
echo’
‘;
autoload.php代码举例
try{
spl_autoload_register(function($className){
//1.应该将类名中的命名空间的分隔符转为目录分隔符
$path=str_replace(‘\’,DIRECTORY_SEPARATOR,$className);
echo$path,’
‘;
//2.生成真正要加载的类文件称号
$file=__DIR__.DIRECTORY_SEPARATOR.$path.’.php’;
echo$file,’
‘;
//3.加载这个文件
require$file;
});
}catch(Exception$e){
die($e->getMessage());
}
输出作用:
六、总结
1.不同的命名空间里面能够界说同名的函数、类和常量。
2.命名空间里能够书写任意代码。
3.非限制称号拜访,直接拜访当时目录。
4.限制称号拜访,拜访的是当时目录的子目录。
5.彻底限制称号拜访,是从大局即根目录下开端拜访。
6.大局空间的元素拜访运用彻底限制称号拜访
7.体系内置的类、函数和常量都归于大局空间。
8.体系函数、常量,在命名空间内拜访的时分,体系会主动在自己空间找,如果找不到会到大局空间找。
9.体系类有必要运用大局空间拜访:类名
10.命名空间的别号能够简化代码。
11.类文件的主动加载虽然在嵌套时需求创立多个文件,可是对于后期的数据保护与更新,却是简练方便的。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。