热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动加载机制在命名空间和类文件中的应用与优化

1.命名空间namespace user1{ class Demo1 { const NAME = '这是user1下的Demo1'; }}namespace user

1.命名空间

  1. namespace user1
  2. {
  3. class Demo1
  4. {
  5. const NAME = '这是user1下的Demo1';
  6. }
  7. }
  8. namespace user2
  9. {
  10. class Demo1{
  11. const NAME ='这是user2下的Demo1';
  12. }
  13. //访问另一个空间的成员,必须使用完全限定名称,根目录用'\'表示
  14. //访问user1下的类
  15. echo \user1\Demo1::NAME.'
    '
    ;
  16. //非限定名称:在访问空间成员前面没有命名空间
  17. echo Demo1::NAME.'
    '
    ;
  18. //限定名称:不是从根目录找起,访问成员前至少有一个命名空间,从当前位置找起
  19. echo user3\Demo1::NAME;
  20. //当前空间没有该函数,会到全局空间去找
  21. echo write();
  22. }
  23. namespace user2\user3
  24. {
  25. class Demo1
  26. {
  27. const NAME ='这是user3下的Demo1';
  28. }
  29. }
  30. //创建一个全局的空间,匿名空间
  31. namespace
  32. {
  33. function write()
  34. {
  35. return '我是在全局空间的函数';
  36. }
  37. }


2.命名空间的别名, 与类别名

  1. namespace ns1
  2. {
  3. class A1
  4. {
  5. public static function write()
  6. {
  7. return 'A1的方法';
  8. }
  9. }
  10. }
  11. namespace ns2
  12. {
  13. class A2
  14. {
  15. public static function write()
  16. {
  17. return 'A2的方法';
  18. }
  19. }
  20. }
  21. namespace
  22. { //给ns1空间起别名
  23. use ns1 as T;
  24. //给ns2空间的A2类起别名
  25. //use ns2\A2 as A2;
  26. //当类名和别名一样是可以简写
  27. use ns2\A2;
  28. echo T\A1::write().'
    '
    ;
  29. echo A2::write().'
    '
    ;
  30. }

类文件的自动加载

__DIR__:文件所在的目录
DIRECTORY_SEPARATOR:系统分隔符

  1. //注册自动加载器
  2. spl_autoload_register(function($className)
  3. { //将类名中的命名空间的分隔符转化为目录分隔符
  4. $path = str_replace('\\',DIRECTORY_SEPARATOR,$className);
  5. //生成文件名称
  6. $file=__DIR__.DIRECTORY_SEPARATOR.$className.'.php';
  7. //加载文件
  8. require $file;
  9. });
  10. //要加载的文件的处理
  11. //要实现自动加载要满足的条件
  12. //1.命名空间必须与类文件所在的绝对路径一致
  13. //2.当前类名与当前类文件名一致
  14. //namespace inc\lib
  15. //{
  16. // class Demo1
  17. // {
  18. // public static function write()
  19. // {
  20. // return '这是1';
  21. // }
  22. // }
  23. //}
  24. use inc\lib\Demo1;
  25. use inc\lib\Demo2;
  26. echo Demo1::write().'
    '
    ;
  27. echo Demo2::write();


总结

基本了解了命名空间的三种访问形式完全限定名称,限定名称和非限定名称,命名空间可以避免组件加载时的命名冲突,自动加载很好的解决了需要加载多个文件就要写多个require的问题。


推荐阅读
author-avatar
静候轮回
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有