博客列表 >函数、类、接口、常量命名空间use的引用和自动加载器的实现原理

函数、类、接口、常量命名空间use的引用和自动加载器的实现原理

程东旭
程东旭原创
2020年05月11日 15:29:29700浏览

实例演示: 非限定名称, 限定名称, 完全限定名称,并分析应用场景

  1. <?php
  2. //1.建立一个命名空间
  3. namespace Phone\iphone;
  4. //函数
  5. function iphone4(){
  6. return 'iphone4的价格是1000元';
  7. }
  8. //类
  9. class iphone5
  10. {
  11. public static function iphon5()
  12. {
  13. return 'iphone5的价格是2000元';
  14. }
  15. }
  16. //接口
  17. interface iphone6
  18. {
  19. public static function iphone6();
  20. }
  21. //常量
  22. const IPHONEX = 'iphonex的价格是8000元';
  23. //2.建立另一个命名空间,并且访问上一空间中的内容
  24. namespace aaa;
  25. //通过完全限定名称访问
  26. //函数
  27. echo \Phone\iphone\iphone4() , '<br>';
  28. //类
  29. echo \Phone\iphone\iphone5::iphon5() , '<br>';
  30. //常量
  31. echo \Phone\iphone\IPHONEX , '<br>';
  32. echo '<hr>';
  33. //通过use关键字引入,把访问由完全限定名称转换为限定名称或者非限定名称
  34. //函数
  35. //可以通过use将访问函数由完全限定名称转换为限定名称,但是不能转换为非限定名称
  36. use Phone\iphone;
  37. echo iphone\iphone4() , '<br>';
  38. //类
  39. //可以通过use将访问类由完全限定名称转换为非限定名称,但是不能转换为限定名称
  40. use Phone\iphone\iphone5;
  41. echo iphone5::iphon5() , '<br>';
  42. //接口
  43. //可以通过use将访问接口由完全限定名称转换为非限定名称,但是不能转换为限定名称
  44. use Phone\iphone\iphone6;
  45. class iphone6s implements iphone6
  46. {
  47. public static function iphone6()
  48. {
  49. return 'iphone6的价格是3000元';
  50. }
  51. }
  52. echo iphone6s::iphone6() , '<br>';
  53. //常量
  54. //没有办法通过use将完全限定名称转换为限定名称或者非限定名称
  55. //use Phone\iphone;
  56. //echo IPHONEX;

总结

1、可以通过use将访问函数由完全限定名称转换为限定名称,但是不能转换为非限定名称

2、可以通过use将访问类由完全限定名称转换为非限定名称,但是不能转换为限定名称

3、可以通过use将访问接口由完全限定名称转换为非限定名称,但是不能转换为限定名称

4、没有办法通过use将完全限定名称转换为限定名称或者非限定名称

实例演示: 类文件的自动加载器实现的原理与实现

先建立一个自动加载器

  1. <?php
  2. try {
  3. spl_autoload_register(function ($namespace){
  4. //将命名空间中的分隔符转换为目录分隔符
  5. $path = str_replace('\\', DIRECTORY_SEPARATOR, $namespace);
  6. //生成真正要加载的地址和文件
  7. $file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
  8. require $file;
  9. });
  10. }catch (Exception $e) {
  11. die($e->getMessage());
  12. }

引用这个自动加载器

  1. <?php
  2. require 'autoload.php';
  3. use car\toyota\corolla;
  4. echo corolla::aaa(), '<br>';

总结

1、自动加载器的原理就是将命名空间转换为文件路径,当被转换后的文件路径和该文件的实际路径一致并且该文件的文件名称和类名称一致的时候,该文件可以被自动加载

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