博客列表 >全局成员访问方式与命名空间别名机制(0210)

全局成员访问方式与命名空间别名机制(0210)

暴风战斧
暴风战斧原创
2020年02月15日 23:16:39719浏览

编程思路

一开始这些概念没理解,看了两遍才理解,理解后再模仿实践代码

作业总结

感觉现在进入了理解难点知识阶段了,一次看不懂就多看两遍,代码还是要写,自己亲手写出来真正印在脑子里!

1.全局成员四类访问方式

  • 演示代码
  1. <?php
  2. //创建命名空间
  3. namespace chapter01;
  4. //1.完全限定名称访问类
  5. require 'demo01.php';
  6. $result = \chapter01\lib\Demo::index();
  7. // 格式化打印结果
  8. echo '<pre>' . print_r($result, true) . '</pre>';
  9. echo '<hr>';
  10. //2.完全限定名称访问接口
  11. require 'demo04.php';
  12. class Test01 implements \chapter01\api\iTest
  13. {
  14. public static function hello()
  15. {
  16. return class_implements(self::class);
  17. }
  18. }
  19. $result = Test01::hello();
  20. //2.完全限定名称访问接口
  21. require 'demo04.php';
  22. class Test01 implements \chapter01\api\iTest
  23. {
  24. public static function hello()
  25. {
  26. return class_implements(self::class);
  27. }
  28. }
  29. $result = Test01::hello();
  30. //2.完全限定名称访问接口
  31. require 'demo04.php';
  32. class Test01 implements \chapter01\api\iTest
  33. {
  34. public static function hello()
  35. {
  36. return class_implements(self::class);
  37. }
  38. }
  39. $result = Test01::hello();
  40. // 格式化打印结果
  41. echo '<pre>' . print_r($result, true) . '</pre>';
  42. echo '<hr>';
  43. //3.完全限定名称访问函数
  44. require 'demo02.php';
  45. $result = \chapter01\common\getFuncName();
  46. // 格式化打印结果
  47. echo '<pre>' . print_r($result, true) . '</pre>';
  48. echo '<hr>';
  49. //4.完全限定名称访问常量
  50. require 'demo03.php';
  51. $result = \chapter01\constant\SITE_NAME;
  52. // 格式化打印结果
  53. echo '<pre>' . print_r($result, true) . '</pre>';
  54. echo '<hr>';
  55. //访问全局空间中的常量
  56. $result = \PHONE['name'] . ':' . \PHONE['price'];
  57. // 格式化打印结果
  58. echo '<pre>' . print_r($result, true) . '</pre>';
  • 效果图

2.导入四类成员的方式

  • 演示代码
  1. <?php
  2. //创建命名空间
  3. namespace chapter01;
  4. //1.导入完全限定名称的类
  5. use chapter01\lib\Demo;
  6. require 'demo01.php';
  7. $result = Demo::index();
  8. // 格式化打印结果
  9. echo '<pre>' . print_r($result, true) . '</pre>';
  10. echo '<hr>';
  11. //2.导入完全限定名称的接口
  12. use chapter01\api\iTest;
  13. require 'demo04.php';
  14. class Test01 implements iTest
  15. {
  16. public static function hello()
  17. {
  18. return class_implements(self::class);
  19. }
  20. }
  21. $result = Test01::hello();
  22. // 格式化打印结果
  23. echo '<pre>' . print_r($result, true) . '</pre>';
  24. echo '<hr>';
  25. //3.导入完全限定名称的函数
  26. require 'demo02.php';
  27. use function chapter01\common\getFuncName;
  28. $result = getFuncName();
  29. // 格式化打印结果
  30. echo '<pre>' . print_r($result, true) . '</pre>';
  31. echo '<hr>';
  32. //4.导入完全限定名称的常量
  33. require 'demo03.php';
  34. use const chapter01\constant\SITE_NAME;
  35. $result = SITE_NAME;
  36. // 格式化打印结果
  37. echo '<pre>' . print_r($result, true) . '</pre>';
  • 效果图

3.全局中别名引用方式

  • 演示代码
  1. <?php
  2. //创建命名空间
  3. namespace chapter01;
  4. //别名引用方式
  5. class User
  6. {
  7. //..
  8. }
  9. //为避免重名,将导入的类定义别名
  10. require 'demo05.php';
  11. use chapter01\admin\User as Users;
  12. $result = Users::class;
  13. // 格式化打印结果
  14. echo '<pre>' . print_r($result, true) . '</pre>';
  15. echo '<hr>';
  16. // 别名与当前完全限定名称的成员名称相同的时候, 可以省略
  17. require 'demo06.php';
  18. use chapter01\index\Index;
  19. $result = Index::class;
  20. // 格式化打印结果
  21. echo '<pre>' . print_r($result, true) . '</pre>';
  • 效果图

4.问答题解答

  • 完全限定名称, 限定名称与非限定名称

    完全限定名称:从全局空间开始查找成员,类似绝对路径;
    限定名称:从当前空间开始查找成员,类似相对路径;
    非限定名称:仅在当前空间中查找成员,类似当前路径!

  • 完成限定名称与限定名称, 非限定名称之间的转换方式

    完全限定名称:具有完整命名空间名称
    非限定名称: 类名称前不允许有\
    限定名称:类名称前面至少有一个\, 而且这个\不是第一个字符

  • use 解决了什么?

    使用use语法将全局成员导入后, 在当前脚本中就不必再书写冗长的完全限定名称。

  • ::class操作符为什么比NAMESPACE好用? 具体应用场景有哪些?
  • __NAMESPACE__: 魔术常量, 返回当前命名空间,经常采用拼接方式使用, ::class: 返回具有完全限定的类名;::class用于快速生成完全限定名称的类名!
  1. $result = call_user_func([__NAMESPACE__ . '\lib\Demo', 'index']);
  2. $result = Index::class;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议