Blogger Information
Blog 119
fans 3
comment 1
visits 94601
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
命名空间基础知识
赵大叔
Original
917 people have browsed it

一、命名空间关键字和常用术语

1、namespace: 声明一个命名空间。
2、完全限定名称:总是从根空间开始,第一个字符一定是反斜线。
3、限定名称:成员名称前面至少要一个命名空间, 至少要有一个反斜线,且不能在首位。
4、非限定名称:成员前面不能有任何的命名空间,不能有反斜线。
5、导入:使用use关键字;别名:使用as关键字;。
6、::class:直接返回的完全限定的类名;__NAMESPACE__:直接返回的当前空间名称。

对于函数的常量,在当前空间找不到,会自动到全局空间下找。

三类命名空间:

  1. <?php
  2. namespace texhong\nhontrach;
  3. // 声明命名空间必须是程序脚本的第一条语句
  4. class Demo
  5. {
  6. const DEPART = 'texhong_phongnhansu';
  7. }
  8. namespace texhong\nganlong;
  9. class Demo
  10. {
  11. const DEPART = 'nganlong_phongnhansu';
  12. }
  13. namespace texhong;
  14. class Demo
  15. {
  16. const DEPART = 'phongnhansu';
  17. }
  18. // 非限定名称:只能访问当前空间下成员
  19. echo Demo::DEPART .'<br>';
  20. // 限定名称:在具的层级关系的空间下访问深层级的空间成员
  21. echo nganlong\Demo::DEPART .'<br>';
  22. // 完全限定名称:可以访问所有空间下成员
  23. echo \texhong\nhontrach\Demo::DEPART .'<br>';

演示效果图:

别名:

  1. <?php
  2. namespace texhong\nhontrach\xuatnhapkhau\nhanviengiayto;
  3. class Nhanvien
  4. {
  5. const NAME = 'cu';
  6. }
  7. namespace texhong\nhontrach\xuatnhapkhau\nhanviengiayto;
  8. class Chuquan
  9. {
  10. const NAME = 'hien';
  11. }
  12. // 1. 当要多次使用较长空间名称的时候,给空间起个别名会很方便
  13. // 给外部的空间起了一个别名
  14. use texhong\nhontrach\xuatnhapkhau\nhanviengiayto as tnxn;
  15. // 别名调用
  16. echo tnxn\Nhanvien::NAME .'<br>';
  17. echo tnxn\Chuquan::NAME .'<hr>';
  18. // 2. 类级的别名:空间名带上类名称
  19. use texhong\nhontrach\xuatnhapkhau\nhanviengiayto\Nhanvien as NH;
  20. echo NH::NAME .'<hr>';
  21. namespace test;
  22. // 当类别名和原名一样时,可以省略
  23. use texhong\nhontrach\xuatnhapkhau\nhanviengiayto\Nhanvien;
  24. echo Nhanvien::NAME .'<hr>';

演示效果图:

二、自动加载

其实就是通过封装一个函数,实现自动加载
命名空间必须和类文件所在的绝对路径一一对应
当前类名称与当前的类文件的名称完全一致

  1. // 自动加载器
  2. <?php
  3. try {
  4. // 注册自动加载
  5. spl_autoload_register(function($className){
  6. //1. 应该将类名中的命名空间的分隔符转为目录分隔符
  7. $path = str_replace('\\', DIRECTORY_SEPARATOR, $className);
  8. // 2. 生成真正要加载的类文件名称
  9. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  10. // 3. 加载这个文件
  11. require $file;
  12. });
  13. } catch (Exception $e) {
  14. die($e->getMessage());
  15. }
  16. // 使用自动加载
  17. namespace testAutoload;
  18. require 'autoload.php';
  19. use inc\lib\Demo1;
  20. use inc\lib\Demo2;
  21. use inc\lib\Demo3;
  22. echo Demo1::show() .'<hr>';
  23. echo Demo2::show() .'<hr>';
  24. echo Demo3::show() .'<hr>';

要加载文件目录:

演示效果图:

总结:

1、命名空间借鉴了传统的使用目录管理文件的方式, 来管理程序中的全局成员。
2、完全限定名称、非完全限定名称、非限定名称。(都是名称,也就是名字,相当于文件名。)
3、三者区别在于目录层级的深浅。

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