当前位置: 首页 > 后端技术 > PHP

PHP命名空间_1

时间:2023-03-29 17:36:51 PHP

在PHP中,函数、类、常量是不允许重名的,一旦重名就会出错。但是,在大型项目的开发中,不同的团队可能负责不同的模块,因此很难杜绝重名结构的出现,于是产生了“命名空间”。“命名空间”确保即使出现同名结构,也不会影响整个项目。1.命名空间定义:命名空间是指人为的对内存进行分隔,允许不同内存区域的同名结构共存。从而解决大型项目中可能出现的重名结构问题。2、命名空间语法:命名空间+空间名称3、命名空间访问方式不受限制的命名访问:成员前面不能有任何命名空间,不能有“\”,理解为文件的当前路径,如:echoHuman::PERSON_NAME。限制名称访问:成员名前至少要有一个命名空间,至少要有一个反斜杠“\”,不能在第一位,可以理解为相对路径。对受限名称的访问是基于子空间完成的,例如echospace2\Human::PERSON_NAME。完全限制名称访问:这种访问方法是默认的,也是最常用的。访问总是从根空间(即全局空间)开始,第一个字符必须是反斜杠(“\”),可以将完整的受限名称访问理解为绝对路径,用“\”作为全局空间的初始符号。例如echo\space3\Human::PERSON_NAME。代码示例:namespace1;echo__NAMESPACE__.'';classHuman{constPERSON_NAME='王小定';}//1。不受限制的标题echoHuman::PERSON_NAME;回声'';//2。受限标题命名空间;echospace2\Human::PERSON_NAME。'';命名空间\空间2;echo__NAMESPACE__.'';classHuman{constPERSON_NAME='王小定';}//3。彻底限制标题(默认,最常用)echo'';命名空间3;echo__NAMESPACE__.'';classHuman{constPERSON_NAME='王小丁';}echo\space3\Human::PERSON_NAME;输出效果:4.命名空间别名和类号PHP命名空间支持有两种使用别名或导入的方法:对类名使用别名,或者对命名空间名使用别名。代码示例://1。命名空间别名namespacemyspace1;classC1{//...}echo\myspace2\C2::index(),'';echo\myspace2\C3::cate(),'';命名空间myspace2;classC2{publicstaticfunctionindex(){返回'主页';}}classC3{publicstaticfunctioncate(){返回'频道页';}}命名空间myspace3;//use用于声明一个空间别名,usedefaults从根空间开始//对于外部空间有一个别名,myspace2===>susemyspace2ass;echos\C2::index(),'';echos\C3::cate(),'';//2。Class-levelalias//给外部空间的类起一个别名//usemyspace2\C2asC2;//使用myspace2\C3asC3;//echoC2::index(),'';//echoC3::cate(),'';//类别号与原来的类名相同,此时类别号可以省略。虽然可以这样使用,但是建议命名为//usemyspace2\C2;//因为当时类中存在类名冲突C2usemyspace2\C2asC;使用我的空间2\C3;echoC2::index(),'';echoC::index(),'';echoC3::cate(),'';classC2{publicstaticfunctionindex(){返回'首页NS-T2';}}输出函数:5.类文件的主动加载想要完成自动加载需要满足两个条件1.命名空间必须对应class文件所在的绝对路径2.当时的类名和当时的class文件名字完全一致//封装自动加载器//需要在同一个路径下创建一个或几个php文件,需要创建一个autoload.php文件作为importbridgerequire'自动加载.php';回声'';使用inc\lib\Demo1;使用inc\lib\Demo2;使用inc\lib\Demo3;echoDemo1::say(),'';回声'';echoDemo2::say(),'';回声'';echoDemo3::say(),'';回声'';autoload.php代码示例try{spl_autoload_register(function($className){//1.类名中的命名空间分隔符应该转换为目录分隔符$path=str\_replace('\\\\',DIRECTORY\_SEPARATOR,$className);echo$path,'';//2.生成要加载的class文件名$file=\_\_DIR\_\_.DIRECTORY\_SEPARATOR.$path.'.php';echo$file,'';//3.加载这个文件require$file;});}catch(Exception$e){死亡($e->getMessage());}输出函数:6.总结1.同名的函数、类和常量可以定义在不同的命名空间中2.可以在命名空间中编写任意代码。3.无限制的标题访问,直接访问当前目录。4.限制名称访问,访问的是当前目录的子目录。5、完全限制名称访问,从全局,即根目录开始访问。6.访问全局空间中的元素使用完全受限的名称访问。7、系统内置的类、函数、常量都属于全局空间。8、在命名空间中访问系统函数和常量时,系统会自动在自己的空间中查找,如果找不到,则会在全局空间中查找。9、系统类必须使用全局空间访问:\类名10、命名空间的别名可以简化代码。11、类文件自动加载虽然嵌套时需要创建多个文件,但对于后期的数据保护和更新来说简单方便。