博客列表 >PHP基础:命名空间基础知识及类文件的自动加载

PHP基础:命名空间基础知识及类文件的自动加载

暴宇
暴宇原创
2020年06月01日 21:53:53691浏览

PHP基础:命名空间基础知识及类文件的自动加载

1.命名空间基础知识

1.1声明命名空间的语法

用关键字namespace来声明命名空间
namespace 空间名称;

1.2命名空间的使用:

非限定名称:成员前面不添加任何的空间名称,包括\,相当于当前路径

限定名称:成员前面至少要有1个命名空间和1个反斜线\, 且反斜线\不能在首位, 相当于相对路径

完全限定名称:第一个字符一定是反斜线(反斜线代表根空间), 然后再跟上命名空间,相当于绝对路径

1.3命名空间的应用场景:

非限定名称:可应用于访问当前命名空间里的成员

限定名称:可应用于访问下级命名空间里的成员

完全限定名称:可应用于所有场景,不管当前处在哪个空间下,利用完全限定名称都可访问到指定成员

1.4 代码示例

  1. // 命名空间
  2. namespace D盘;
  3. // 相当于磁盘目录
  4. class file{
  5. const FILENAME= __CLASS__;
  6. }
  7. // 非限定名称:成员前面不添加任何的空间名称,包括\,相当于当前路径
  8. echo file::FILENAME,'<hr>';
  9. namespace D\一级目录;
  10. // 相当于1级目录
  11. class file{
  12. const FILENAME= __CLASS__;
  13. }
  14. // 限定名称:成员前面至少要有1个命名空间和1个反斜线\, 且反斜线\不能在首位, 相当于相对路径
  15. echo 二级目录\file::FILENAME,'<hr>';
  16. namespace D\一级目录\二级目录;
  17. // 相当于2级目录
  18. class file{
  19. const FILENAME= __CLASS__;
  20. }
  21. // 完全限定名称:第一个字符一定是反斜线(反斜线代表根空间), 然后再跟上命名空间,相当于绝对路径
  22. echo \D\一级目录\file::FILENAME,'<hr>';

1.5 运行效果图

1.6 命名空间及类的别名

用关键字use给命名空间起别名,也可给命名空间中的类起别名

  1. namespace newdir;
  2. // 给命名空间起别名
  3. // 语法:use 命名空间名称 as 别名
  4. use D as d;
  5. echo d\file::FILENAME,'<hr>';
  6. // 给命名空间+类起别名
  7. // 语法:use 命名空间名称+类名称 as 别名
  8. use D\一级目录\file as onefile;
  9. echo onefile::FILENAME,'<hr>';
  10. // 如果别名与类名相同,可省略as关键字及别名
  11. // 语法:use 命名空间名称+类名称
  12. use D\一级目录\二级目录\file;
  13. echo file::FILENAME,'<hr>';

命名空间和类别名 主要应用于简化命名空间较多且路径较长的类名称,可将命名空间和文件所在路径一一对应,类名和文件名一一对应,实现自动加载类文件

2.类文件的自动加载

2.1实现原理:

(1)将带命名空间的类名称中的反斜线替换为系统目录分割符

(2)拼接出要加载的类文件绝对路径

(3)用require加载这个类文件

(4)用use简化类名称,使用简化后的类名称访问类方法

2.2代码示例

  1. // 获取到带命名空间的类名称
  2. $className = 'inc\lib\functionclass';
  3. //1.将带命名空间的类名称中的反斜线替换为系统目录分割符
  4. $path = str_replace('\\', DIRECTORY_SEPARATOR, $className);
  5. // 2.拼接出要加载的类文件绝对路径
  6. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  7. // 3.用require加载这个类文件
  8. require $file;
  9. // 4.用use简化类名称,使用简化后的类名称访问类方法
  10. use inc\lib\functionclass;
  11. echo functionclass::myfunction();

2.3运行效果

3.总结

3.1 利用命名空间可将同类代码放在一起管理,就像管理文件一样,既直观又方便

3.2 利用命名空间与文件路径的映射,类名称与文件名的映射可实现自动加载类文件

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议