热门标签 | 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的问题。


推荐阅读
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文探讨了Node.js后端开发的基础知识,包括模块源码的使用方法、前后端源码的区别以及如何在命令行环境中编译Node.js源代码。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 如何在PyCharm中配置Python脚本的默认模板
    本文介绍如何在PyCharm中设置Python脚本的默认模板,以便每次创建新的.py文件时自动填充预设内容,提高开发效率。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
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社区 版权所有