Blogger Information
Blog 29
fans 0
comment 0
visits 27326
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础:命名空间基础知识及类文件的自动加载
暴宇
Original
695 people have browsed it

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 利用命名空间与文件路径的映射,类名称与文件名的映射可实现自动加载类文件

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:命名空间在后面的框架中很有用
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post