分享

PHP的命名空间

 我的下雨天za3m 2020-06-17

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多