登录  /  注册
博主信息
博文 22
粉丝 1
评论 1
访问量 21562
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP基础---命名空间全局成员的访问与use导入/别名---PHP培训十期线上班
Miss灬懒虫
原创
1096人浏览过

PHP基础—-命名空间全局成员的访问与use导入/别名

学习总结

命名空间的访问类似于系统文件管理的方式,根目录\来表示,我们按照文件管理方式理解就可以了。

其次,特别要注意就是use的导入并不能代替加载includerequire,也就是说在使用use之前,我们依然要加载其所在的脚本文件。

最后,use 默认导入 类、接口、方法,若要导入常量或函数,则需要添加相应的关键字 const|function

当然,我们应该知道,全局成员是包括:类,接口,函数,常量;(不包含变量,因为变量是受到作用域限制,例如函数中的定义的变量,不能在外部访问);

更多说明在代码注释中…..请认真浏览哦 - - -_- !

示例目录

测试效果

app.php代码

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Air15_2019
  5. * Date: 2020/2/10
  6. * Time: 19:35
  7. */
  8. /*
  9. * 命名空间,需要PHP5.3+才能被支持(其参考了传统的目录管理文件的方式);
  10. * 命名空间的功能:
  11. * 1-规范了全局成员的声明与访问方式;
  12. * 2-规范了全局成员的命名方式与命名冲突的解决方案;
  13. * */
  14. /*
  15. * 常用术语
  16. * 全局成员:类,接口,函数,常量;(不包含变量,因为变量是受到作用域限制,例如函数中的定义的变量,不能在外部访问)
  17. * 全局空间:使用‘|’,表示根目录;
  18. * 完全限定名称:是指从根空间检索全局成员,类似于文件管理的绝对路径概念;
  19. * 限定名称:是指从当前空间检索全局成员,类似于文件管理的相对路径;
  20. * 非限定名称:是指仅从当前空间检索全局成员,类似于文件管理的当前路径;
  21. * */
  22. /*
  23. * 关键字
  24. * namespaces,创建命名空间(必须位于代码的第一行),也可用于引用当前命名空间,类似于类中的'self';
  25. * 魔术常量,__NAMESPACE__,__CLASS__,__METHOD__,内部存储的内容类型固定,但数据是变化的,并且由系统自身维护;
  26. * __NAMESPACE__,返回一个包含当前命名空间名称的字符串;
  27. * __CLASS__,返回一个包含当前类“完全限定名称”的字符串;
  28. * __METHOD__,返回一个包含当前方法“完全限定名称”的字符串;
  29. * __FUNCTION__,返回一个包含当前函数“完全限定名称”的字符串;
  30. * ::class,返回具有“完全限定名”的类名;
  31. * */
  32. //创建命名空间
  33. namespace application;
  34. //引用文件 文件
  35. require 'api.php';
  36. require 'interface.php';
  37. require 'config.php';
  38. //root类
  39. class root{
  40. public $rootName;
  41. public function get_root(){
  42. $this->rootName=[
  43. 'namespace'=>__NAMESPACE__,
  44. 'classname'=>__CLASS__,
  45. 'method'=>__METHOD__
  46. ];
  47. return$this->rootName;
  48. }
  49. }
  50. //非限定名称-访问全局成员
  51. echo '非限定名称-访问全局成员<br>';
  52. $root=new root(); //等价于 $root=new namespace\root();
  53. $array_root=$root->get_root();
  54. echo '<pre>'.print_r($array_root).'</pre>';
  55. echo '<hr>';
  56. //限定名称-访问全局成员
  57. echo '限定名称-访问全局成员<br>';
  58. $api=new api\api_lie();
  59. $api_str=$api->results();
  60. echo $api_str;
  61. echo '<hr>';
  62. //完全限定名称-访问全局成员
  63. echo '完全限定名称-访问全局成员**类<br>';
  64. $name=new \application\root();
  65. $array_root=$root->get_root();
  66. echo '<pre>'.print_r($array_root).'</pre>';
  67. echo '<hr>';
  68. //完全限定名称-访问全局成员**常量
  69. echo '完全限定名称-访问全局成员**常量<br>';
  70. echo \application\config\SITE_NAME;
  71. echo '<hr>';
  72. //完全限定名称-访问全局成员**函数
  73. echo '完全限定名称-访问全局成员**函数<br>';
  74. echo \application\config\total(3.3,2);
  75. echo '<hr>';
  76. //完全限定名称-访问全局成员**接口
  77. echo '完全限定名称-访问全局成员**接口<br>';
  78. $inter=new \application\interfaces\registerInfo();
  79. echo $inter->getRegisterID();
  80. echo '<hr>';
  81. //::class 可以解析/反射出类的“完全限定名称”;
  82. $results=root::class;
  83. echo $results;
  84. //===================================================================
  85. /*
  86. * use 关键字的导入机制;
  87. * use 导入,就是声明当前脚本中要使用到的全局成员(使用全局限定名称表示);
  88. * 作用:解决当前脚本中冗长的 完全限定名称;
  89. * 语法:use 全局成员的完全限定名称(因为 use 默认就是从全局开始,所以完全限定名称的`\`可以省略);
  90. * 特别注意:
  91. * 1-导入并不能等于加载,自然也就不能代替`include`|`require`;
  92. * 2-use 默认导入 类、接口、方法,若要导入常量或函数,则需要添加相应的关键字 `const`|`function`;
  93. * */
  94. /*
  95. * 导入的别名,是为了避免出现重名调用的问题;
  96. * 如果不使用 as 赋予别名,那么use 引用的默认别名就是 `完全限定名称的类名 方法名 函数 常量名`;
  97. * */
  98. //use 导入常量
  99. use const application\config\SITE_NAME as Const_site;
  100. //use 导入函数 默认别名 是total
  101. use function application\config\total;
  102. //use 导入类
  103. use application\api\api_lie;
  104. //use 导入接口
  105. use application\interfaces\iRegister;
  106. echo '<br><br>===========use 导入机制==============<br>';
  107. echo '输出常量:<br>';
  108. echo Const_site;
  109. echo '<hr>';
  110. echo '输出函数结果:<br>';
  111. $fun_total=total(8.9,6);
  112. echo $fun_total;
  113. echo '<hr>';
  114. echo '输出引用类的名称:<br>';
  115. $className=api_lie::class;
  116. echo $className;
  117. echo '<hr>';
  118. echo '输出引用接口的名称:<br>';
  119. echo iRegister::class;
  120. echo '<hr>';
  121. ?>

api.php代码

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Air15_2019
  5. * Date: 2020/2/10
  6. * Time: 20:06
  7. */
  8. /*
  9. * api
  10. * */
  11. namespace application\api;
  12. class api_lie{
  13. public static $lie='这是一个静态属性';
  14. public function results(){
  15. return'api_lie_method(results)';
  16. }
  17. }
  18. ?>

interface.php代码

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Air15_2019
  5. * Date: 2020/2/10
  6. * Time: 20:06
  7. */
  8. /*
  9. * 接口类
  10. * */
  11. namespace application\interfaces;
  12. //接口定义
  13. interface iRegister{
  14. public function getRegisterID();
  15. }
  16. //接口实现
  17. class registerInfo implements iRegister{
  18. public $RegisterID=1017;
  19. public function getRegisterID()
  20. {
  21. // TODO: Implement getRegisterID() method.
  22. return '注册ID:'.$this->RegisterID;
  23. }
  24. }
  25. ?>

config.php代码

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Air15_2019
  5. * Date: 2020/2/10
  6. * Time: 20:41
  7. */
  8. /*
  9. * 配置文件config
  10. * */
  11. namespace application\config;
  12. //站点名称
  13. const SITE_NAME='这是一个常量!';
  14. //函数
  15. function total(float $price,int $number):float {
  16. return $price*$number;
  17. }
  18. ?>
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:use 本质上是将完全限定名称成员转为非限定名称,但是在当前空间中默认成员就是非限定命名,所以很可能会命名冲突, 于是就有了别名处理机制. 除了用别名, 还可以用use将完全限定名称转为限定名称也可以避免冲突, 但显然没有别名来得优雅
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
1条评论
Miss灬懒虫 2020-02-11 12:20:41
谢谢 导师的批改评语,受教了!
1楼
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学