博主信息
博文 56
粉丝 1
评论 0
访问量 77604
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
命名空间:完全限定、限定与非限定实例与类自动加载器
零龙
原创
853人浏览过

命名空间 namespace

PHP 命名空间可以解决以下两类问题:

  • 1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • 2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

1、非限定名称:省略空间名称,使用默认或当前的命名空间
2、完全限定名称:类似绝对目录,从全局空间的反斜线开始’\’
3、限定名称:前面必须添加全局空间才可访问

示例:

  1. <?php
  2. namespace test;
  3. const USER_NAME = '曹操';
  4. function info()
  5. {
  6. return '魏国人';
  7. }
  8. class Demo
  9. {
  10. public static function nation()
  11. {
  12. return USER_NAME.'->魏国人!';
  13. }
  14. }
  15. echo '1、非限定名称:省略空间名称,使用默认或当前的命名空间';
  16. echo '<hr>';
  17. echo USER_NAME;
  18. echo '<hr>';
  19. echo info();
  20. echo '<hr>';
  21. echo Demo::nation();
  22. echo '<hr>';
  23. echo '当前命名空间: ',__NAMESPACE__,'<hr>';
  24. echo '2、完全限定名称:类似绝对目录,从全局空间的反斜线开始';
  25. namespace test\demo\show\index\test;
  26. const USER_NAME = '刘备';
  27. function info()
  28. {
  29. return '蜀国';
  30. }
  31. class Demo
  32. {
  33. public static function nation()
  34. {
  35. return USER_NAME.'->魏国人!';
  36. }
  37. }
  38. echo '<hr>';
  39. echo \test\demo\show\index\test\USER_NAME;
  40. echo '<hr>';
  41. echo \test\demo\show\index\test\info();
  42. echo '<hr>';
  43. echo \test\demo\show\index\test\Demo::nation();
  44. echo '<hr>';
  45. echo '当前命名空间: ',__NAMESPACE__,'<hr>';
  46. use test\demo\show\index\test as show;
  47. echo show\USER_NAME;
  48. echo show\info();
  49. echo show\Demo::nation();
  50. echo '<hr>';
  51. echo '3、限定名称:前面必须添加全局空间才可访问';
  52. namespace test\demo\show\index;
  53. echo test\USER_NAME;
  54. echo '<hr>';
  55. echo test\info();
  56. echo '<hr>';
  57. echo test\Demo::nation();
  58. echo '<hr>';
  59. echo '当前命名空间: ',__NAMESPACE__,'<hr>';

示例图

总结:完全限制:从全局开始,类似绝对路径。
限定名称:添加了全局空间才可以使用。类似相对路径
非限定名称:类似类访问当前的空间。

PHP类自动加载器

自动加载就是我们在new一个class的时候,不需要手动去写require来导入这个class.php文件,程序自动帮我们加载导入进来。
自动加载可以说是现代PHP框架的根基,任何牛逼的框架或者架构都会用到它,它发明出来的理由是啥呢?一个字:懒。因为项目越来愈大,相关联的类库文件越来越多,我们不可能再像小项目那样在一个文件中全部手动一个一个require

示例

  1. <?php
  2. try {
  3. spl_autoload_register(function($class){
  4. $path = str_replace('\\',DIRECTORY_SEPARATOR,$class);
  5. $file = __DIR__. DIRECTORY_SEPARATOR.$path.'.php';
  6. if(!(is_file($file) && file_exists($file)))
  7. //判断$file是不是一个文件和存不存在
  8. {
  9. throw new \Exception('不是文件或者文件不存在');
  10. }
  11. require $file;
  12. });
  13. } catch (Exception $e){
  14. die($e->getMessage());
  15. }
  16. use bin\lib\Test;
  17. use bin\lib\Test1;
  18. use bin\lib\Test2;
  19. use bin\lib\Test3;
  20. echo Test::class;
  21. echo"<br>";
  22. echo Test1::class;
  23. echo"<br>";
  24. echo Test2::class;
  25. echo"<br>";
  26. echo Test3::class;

示例图:

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:其实完整的类, 就应该带上空间的
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学