博客列表 >0210作业+全局成员的访问方式,导入,别名+10期线上班

0210作业+全局成员的访问方式,导入,别名+10期线上班

江川林
江川林原创
2020年02月12日 14:05:23719浏览

编程题

-1,首先认识什么是全局成员
类,接口,函数,常量
-2,常用的几个魔术常量
__NAMESPACE__,返回当前命名空间(string)
__CLASS__,返回一个以完全限定名称的类名称
__METOD__,返回一个以完全限定名称的方法名称
__FUNCTION__,范围一个以完全限定名称的函数名称
-3,用完全限定名称访问全局成员
以下代码是以完全限定名称访问4大类全局成员

  1. <?php
  2. //创建命名空间,必须在脚本的第一行
  3. namespace chapterA;
  4. //不同脚本的相同命名空间
  5. //类
  6. use chapterA\sub\NAME;
  7. require 'demo2.php';
  8. //$result = namespace\demo2::name();
  9. //非限定名称的类访问,类名前没有'\'
  10. $result = demo2::name();
  11. //创建全局成员,用完全限度名称访问类、接口、函数、常量(全局成员)
  12. //类
  13. require 'demo3.php';
  14. $result = \chapterB\sub\demo3::name();
  15. // 限定名称访问全局成员
  16. //接口
  17. require 'demo4.php';
  18. class sex implements sub\NAME {
  19. public static function name() : array
  20. {
  21. return [
  22. 'namespace'=>__NAMESPACE__,
  23. 'class'=>__CLASS__,
  24. 'method'=>__METHOD__,
  25. ];
  26. }
  27. }
  28. $result = sex::name();
  29. //函数
  30. require 'dem5.php';
  31. //完全限定名称访问
  32. $result = \chapterA\con\study();
  33. //限定名称访问
  34. $result = con\study();
  35. //常量
  36. require 'demo6.php';
  37. //完全限定名称
  38. $result = \chapterA\cons\NAME;
  39. echo '<pre>' . print_r($result, true) . '</pre>';

-4,导入4大类全局成员的方式
use+\完全限定名称)
以下代码是导入

  1. <?php
  2. namespace chapterA;
  3. // 导入和别名
  4. //导入:声明当前脚本中要用到的,使用完全限定成员表示的全局成员
  5. //导入的作用:全局成员导入后,就不在书写冗长的完全限定名称了
  6. //语法:(use \完全限定名称的全局成员)因为默认全局开始,所以可以省略开头的\
  7. //导入完全限定名称的类
  8. require 'demo2.php';
  9. use \chapterA\demo2;
  10. $result = demo2::name();
  11. //导入完全限定名称的接口
  12. require 'demo4.php';
  13. use \chapterA\sub\NAME;
  14. class sex implements NAME {
  15. public static function name() : array
  16. {
  17. return [
  18. 'namespace'=>__NAMESPACE__,
  19. 'class'=>__CLASS__,
  20. 'method'=>__METHOD__,
  21. ];
  22. }
  23. }
  24. $result = sex::name();
  25. //导入完全限定名称的函数
  26. require 'dem5.php';
  27. use function \chapterA\con\study;
  28. $result = study();
  29. //导入完全限定名称的常量
  30. //require 'demo6.php';
  31. //use const \chapterA\cons\NAME;
  32. //$result = NAME;
  33. //echo '<pre>' . print_r($result, true) . '</pre>';
  34. //使用use将完全限定名称转换为限定名称
  35. require 'demo6.php';
  36. use const \chapterA\cons;
  37. $result = cons\NAME;
  38. echo '<pre>' . print_r($result, true) . '</pre>';

-5,别名的应用方式
别名是解决了在使用简化后的完全限定名称时,导致的命名冲突的问题

  1. <?php
  2. namespace chapterA;
  3. //创建一个名为dome的类
  4. class demo {
  5. // ...
  6. }
  7. require 'demo9.php';
  8. //导入一个不同脚本相同命名空间,且存在一个名为demo的类
  9. //use \chapterA\demo;
  10. //以上会提示错误:demo已存在
  11. //解决方法:别名
  12. use chapterA\sub\demo as demoA;
  13. $result = demoA::class;
  14. echo '<pre>' . print_r($result,true) . '</pre>';

问答题

-1,完全限定名称:以\开头的,根目录
-2,限定名称:不以\开头,且至少有一个反斜线
-3,非限定名称:当前命名命名空间下的名称
-4,完全限定名称,限定名称,非限定名称的转换,需要use导入

  1. //使用use将完全限定名称转换为限定名称
  2. require 'demo6.php';
  3. use const \chapterA\cons;
  4. $result = cons\NAME;
  5. //使用use将完全限定名称转换为非限定名称
  6. require 'demo6.php';
  7. use const \chapterA\cons\NAME;
  8. $result = NAME;
  9. echo '<pre>' . print_r($result, true) . '</pre>';

-5,use解决了什么?
①当多次使用完全限定名称的时候,冗长的名称代码
②当使用简化后的完全限定名称,可能导致的命名冲突问题(别名)
-6,::class为什么比__NAMESPACE__好用?
::class可以快速的返回完全限定名称的类名称
__NAMESPACE__仅返回当前命名空间的名称

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