博主信息
博文 26
粉丝 0
评论 0
访问量 25649
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
命名空间与类文件的自动加载
雪~人胖胖
原创
1551人浏览过

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.'<br>';
  16. //非限定名称:在访问空间成员前面没有命名空间
  17. echo Demo1::NAME.'<br>';
  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().'<br>';
  29. echo A2::write().'<br>';
  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().'<br>';
  27. echo Demo2::write();

总结

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

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

批改状态:合格

老师批语:命名空间在以后我们会大量的使用, 而且是第一行代码, 如果不懂, 基本没法写下去
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学