在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.类文件的主动加载虽然在嵌套时需求创立多个文件,可是对于后期的数据保护与更新,却是简练方便的。 |
|