博客列表 >PHP:命名空间

PHP:命名空间

楷
原创
2020年05月06日 18:35:34609浏览

一、实例演示: 非限定名称, 限定名称, 完全限定名称

  1. <?php
  2. 实例演示: 非限定名称, 限定名称, 完全限定名称,并分析应用场景
  3. // 1. 非限定名称
  4. // 成员前面不能有任何的命名空间,不能有"\", 理解成文件当前路径
  5. // echo Demo::ROAD_NAME;
  6. // 2. 限定名称
  7. // 成员名称前面至少要一个命名空间, 至少要有一个反斜线\, 且不能在首位, 理解成:相对路径
  8. // echo 武汉市\Demo::ROAD_NAME;
  9. // 3. 完全限定名称
  10. // 总是从根空间开始,第一个字符一定是反斜线,根空间, 理解成绝对路径
  11. // echo \湖北省\武汉市\Demo::ROAD_NAME
  12. namespace china\gd;
  13. echo '命名空间:' .__NAMESPACE__.'<br>';
  14. class User1
  15. {
  16. const road = '广州大道';
  17. }
  18. echo '非限定名称:'. User1::road.'<br>';
  19. echo '完全限定名称:'. \china\gd\User1::road.'<br>';
  20. echo '另外一个完全限定名称:'. \gd\jm\User1::road.'<br>';
  21. namespace gd\jm;
  22. echo '另外一个命名空间:' .__NAMESPACE__.'<br>';
  23. class User1
  24. {
  25. const road = '迎宾大道';
  26. }
  27. echo User1::road.'<br>';
  28. echo jm\User1::road;

实例效果:

二、命名空间的别名

  1. <?php
  2. // 命名空间的别名
  3. namespace china_gd_jm;
  4. class U1
  5. {
  6. }
  7. echo \china_zj_xm\U2::index() .'<br>' ;
  8. echo \china_ah_hf\U3::other().'<hr>';
  9. namespace china_zj_xm;
  10. class U2
  11. {
  12. public static function index()
  13. {
  14. return '首页';
  15. }
  16. }
  17. namespace china_ah_hf;
  18. class U3
  19. {
  20. public static function other()
  21. {
  22. return '软件';
  23. }
  24. }
  25. // use 用来声明空间别名,use 默认就是从根空开始
  26. // 空间级的别名
  27. use china_gd_jm as j;
  28. use china_zj_xm as x;
  29. // echo j\U2::index();
  30. // echo x\U3::other();
  31. // 类级的别名
  32. use \china_zj_xm\U2 as U2;
  33. use \china_ah_hf\U3 as U3;
  34. echo U2::index().'<br>';
  35. echo U3::other();

实力效果:
<?php
// 命名空间的别名

  1. namespace china_gd_jm;
  2. class U1
  3. {
  4. }
  5. echo \china_zj_xm\U2::index() .'<br>' ;
  6. echo \china_ah_hf\U3::other().'<hr>';
  7. namespace china_zj_xm;
  8. class U2
  9. {
  10. public static function index()
  11. {
  12. return '首页';
  13. }
  14. }
  15. namespace china_ah_hf;
  16. class U3
  17. {
  18. public static function other()
  19. {
  20. return '软件';
  21. }
  22. }
  23. // use 用来声明空间别名,use 默认就是从根空开始
  24. // 空间级的别名
  25. use china_gd_jm as j;
  26. use china_zj_xm as x;
  27. // echo j\U2::index();
  28. // echo x\U3::other();
  29. // 类级的别名
  30. use \china_zj_xm\U2 as U2;
  31. use \china_ah_hf\U3 as U3;
  32. echo U2::index().'<br>';
  33. echo U3::other();

实例效果

三、类文件的自动加载

  1. <?php
  2. // 类文件的自动加载
  3. echo __DIR__;
  4. echo '<hr>';
  5. $className = 'inc\lib\Demo1';
  6. $path = str_replace('\\',DIRECTORY_SEPARATOR, $className);
  7. echo $path;
  8. echo '<hr>';
  9. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  10. require $file;
  11. use inc\lib\Demo1;
  12. echo Demo1::say();

实例效果

总结:
1.命名空间看似简单,实际做起来,发现限制命名的语句出错: echo jm\User1::road;,不知为何?
非限定命名:当前路径
限定命名:相对路径
完全限定命名:绝对路径
2.命名和类的别名
use 用来声明空间别名,默认就是从根空开始
语法关键词use as
3.类文件自动加载
关键词:require $file;
函数:str_replace($search, $subject, $str);
// DIRECTORY_SEPARATOR : 目录分隔符
函数用处大,要多用。

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