博客列表 >2月10日 学号:478291 命名空间关键技术

2月10日 学号:478291 命名空间关键技术

Lin__
Lin__原创
2020年02月11日 15:56:31786浏览

完全限定名称访问成员、导入成员以及命名空间别名编程

  • 首先定义四个全局成员

  1. <?php
  2. namespace demo;
  3. class Demo{
  4. function show_name(){
  5. echo self::class;
  6. }
  7. }

接口

  1. <?php
  2. namespace demo\api;
  3. interface IDemo{
  4. public static function show_name();
  5. }

函数(定义在全局范围)

  1. <?php
  2. namespace demo\lib;
  3. function demo(){
  4. echo __METHOD__;
  5. }

常量(不受作用域的限制)

  1. <?php
  2. namespace demo\param;
  3. const USER=array('name'=>'Lin','age'=>26);
  • 完全限定名称访问四类全局成员的方式
  1. <?php
  2. require 'class.php';
  3. require 'interface.php';
  4. require 'function.php';
  5. require 'const.php';
  6. //完全限定名称访问类
  7. echo \demo\Demo::class;
  8. echo '<hr />';
  9. //完全限定名称访问接口
  10. class Demo2 implements \demo\api\IDemo{
  11. static function show_name(){
  12. var_dump(class_implements(self::class));
  13. }
  14. }
  15. Demo2::show_name();
  16. echo '<hr />';
  17. //完全限定名称访问函数
  18. echo \demo\lib\demo();
  19. echo '<hr />';
  20. //完全限定名称访问常量
  21. echo \demo\param\USER['name'];

  • 导入四类全局成员的方式以及别名引用方式(导入不能代替require以及include。默认导入的是类和接口,因此在导入函数和常量时,需要在use后增加functionconst
  1. <?php
  2. //导入类
  3. require 'class.php';
  4. use \demo\Demo;
  5. echo Demo::class;
  6. echo '<hr />';
  7. //导入接口
  8. require 'interface.php';
  9. use \demo\api\IDemo;
  10. class Demo2 implements IDemo{
  11. static function show_name(){
  12. var_dump(class_implements(self::class));
  13. }
  14. }
  15. Demo2::show_name();
  16. echo '<hr />';
  17. //导入函数以及别名引用
  18. require 'function.php';
  19. use function \demo\lib\demo as demoFunction;
  20. echo demoFunction();
  21. echo '<hr />';
  22. //导入常量
  23. require 'const.php';
  24. use const \demo\param\USER;
  25. echo USER['name'];

问答

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

答:完全限定名称,从全局空间开始查找成员,把成员当做一个文件,可以看做是从根目录开始查找这个文件,类似绝对路径,如:\demo\lib\demo; 限定名称,从当前空间开始查找成员,把成员当做一个文件,可以看做是从当前的目录开始查找文件,类似相对路径,即名称前至少一个\并且位置不位于第一个字符,如:lib\demo;非限定名称,仅在当前空间查找成员,把成员当做一个文件,可以看做是只在当前的目录中查找文件,类似当前路径,如:demo

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

答:使用use可以完成,当写出完整的命名空间路径时,可以转为非限定名称;当写出部分的命名空间路径时,可转为限定名称;限定名称, 非限定名称转为完成限定名称,需补齐完整的命名空间路径

  • use 解决了什么什么?

答:首先是限定名称与限定名称, 非限定名称之间的转换,其次简化在访问成员时命名空间完整路径的编写

  • ::class操作符为什么比NAMESPACE好用? 具体应用场景有哪些?

答:::class操作符返回的是完全限定名称,__NAMESPACE__只返回当前的命名空间。具体的应用场景暂不确定。

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