志在指尖
用双手敲打未来

PHP的命名空间

在PHP中,函数、类和常量都是不允许同名的,一旦同名就会呈现过错。可是在大型项目开发中,不同团队负责的模块或许不同,那么就很难防止呈现同名结构,所以“命名空间”就产生了,“命名空间”确保了即使呈现了同名结构,也不会影响到整个项目。
一、命名空间界说:命名空间是指人为的将内存进行分隔,让不同内存区域的同名结构共存。从而解决在大型本项目中或许呈现的重名结构问题。
二、命名空间语法:namespace+空间名字
三、命名空间的拜访办法
非限制称号拜访:成员前面不能有任何的命名空间,不能有“\”,了解成文件当时路径,如:echoHuman::PERSON_NAME。
限制称号拜访:成员称号前面至少要有一个命名空间,至少要有一个反斜线“\”,且不能在首位,了解成相对路径。限制称号的拜访是基于子空间来完成的,如echospace2\Human::PERSON_NAME。
彻底限制称号拜访:这个拜访方法是默认的,用的最多的。拜访总是从根空间(即大局空间)开端拜访,榜首个字符一定是反斜线(“\”),能够将彻底限制称号拜访了解成绝对路径,运用“\”作为大局空间开端符号。如echo\space3\Human::PERSON_NAME。
代码举例:
namespacespace1;
echo__NAMESPACE__.’
‘;
classHuman
{
constPERSON_NAME=’王小丁’;
}
//1.非限制称号
echoHuman::PERSON_NAME;
echo’
‘;
//2.限制称号
namespacespace;
echospace2\Human::PERSON_NAME.’
‘;
namespacespace\space2;
echo__NAMESPACE__.’
‘;
classHuman
{
constPERSON_NAME=’王小丁’;
}
//3.彻底限制称号(默认的,用的最多的)
echo’
‘;
namespacespace3;
echo__NAMESPACE__.’
‘;
classHuman
{
constPERSON_NAME=’王小丁’;
}
echo\space3\Human::PERSON_NAME;
输出作用:
四、命名空间的别号与类别号
PHP命名空间支撑有两种运用别号或导入方法:为类称号运用别号,或为命名空间称号运用别号。
代码举例:
//1.命名空间的别号
namespacemyspace1;
classC1
{
//…
}
echo\myspace2\C2::index(),’
‘;
echo\myspace2\C3::cate(),’
‘;
namespacemyspace2;
classC2
{
publicstaticfunctionindex()
{
return’主页’;
}
}
classC3
{
publicstaticfunctioncate()
{
return’频道页’;
}
}
namespacemyspace3;
//use用来声明空间别号,use默认就是从根空间开端
//给外部的空间起了一个别号,myspace2===>s
usemyspace2ass;
echos\C2::index(),’
‘;
echos\C3::cate(),’
‘;
//2.类级的别号
//给外部空间中的类,起一个别号
//usemyspace2\C2asC2;
//usemyspace2\C3asC3;
//echoC2::index(),’
‘;
//echoC3::cate(),’
‘;
//类别号与原始类名相同,此时能够省掉类别号,虽然能够这样运用,可是主张起上名字
//usemyspace2\C2;
//因为当时类中与有一个与之抵触的类名C2
usemyspace2\C2asC;
usemyspace2\C3;
echoC2::index(),’
‘;
echoC::index(),’
‘;
echoC3::cate(),’
‘;
classC2
{
publicstaticfunctionindex()
{
return’主页NS-T2’;
}
}
输出作用:
五、类文件的主动加载
如果想完成主动加载,需求满足两个条件
1.命名空间有必要和类文件所在的绝对路径一一对应
2.当时类称号与当时的类文件的称号彻底一致
//封装主动加载器
//需求在同一路径下创立一个或许几个php文件,且需求创立一个autoload.php文件来作引进桥梁
require’autoload.php’;
echo’
‘;
useinc\lib\Demo1;
useinc\lib\Demo2;
useinc\lib\Demo3;
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.类文件的主动加载虽然在嵌套时需求创立多个文件,可是对于后期的数据保护与更新,却是简练方便的。

未经允许不得转载:IT技术网站 » PHP的命名空间
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载