博客列表 >0210命名空间完全限定名称与别名导入

0210命名空间完全限定名称与别名导入

Admin
Admin原创
2020年02月12日 14:15:32716浏览

命名空间完全限定名称与别名导入

命名空间的使用规范

  • PHP版本5.3+
  • 规范了全局成员的声明与访问方式
  • 规范了全局成员的命名方式与命名冲突的解决方案

    命名空间常用术语

  • 全局成员(4):类,接口,常量,函数;
  • 全局空间:\这个反斜杠就是代表根目录的意思;
  • 完全限定名称:从反斜杠开始一层一层打开,类似于绝对路径;
  • 限定名称: 开头无反斜杠,中间至少有一个反斜杠,从当前目录开始,类似于相对路径;
  • 非限定名称:无反斜杠,直接上类名,在当前目录。

    魔术常量

    • 魔术常量与常量有何不同,魔术常量不允许用户定义,是系统自带的,会随着使用场景不同而改变值
    • __namespace__返回当前命名空间
    • __class__ 返回一个完全限定名称的类名称
    • __METHOD__返回一个完全限定名称类中的方法
    • __FUNCTION__返回函数名称
    • ::class返回具有完全限定名称的类名

      完全限定名称是什么样子的怎么用的

      1. namespace xiaoyu;
      2. //四类全局成员分别是 函数,常量,类,接口
      3. //完全限定调用类
      4. //首先先将我们的脚本导入进去
      5. require 'demo1.php';
      6. $result = \xiaoyu\lib\Demo::test();
      7. //完全限定调用接口
      8. //首先先将我们的脚本导入进去
      9. require 'demo2.php';
      10. class Demo implements xiaoyu{
      11. public static function test(){
      12. return '小雨';
      13. }
      14. }
      15. $result = \xiaoyu\Demo::test();
      16. //完全限定调用常量
      17. //首先先将我们的脚本导入进去
      18. require 'demo3.php';
      19. $result = \xiaoyu\define\MY_SITE;
      20. //完全限定调用函数
      21. //首先先将我们的脚本导入进去
      22. require 'demo4.php';
      23. $result = \xiaoyu\fun\myfun();
      24. //限定名称函数
      25. $result = fun\myfun();
      26. echo '<pre>'.print_r($result,true).'<pre/>';

      导入四类全局成员方式

      1. namespace xiaoyu;
      2. require 'demo1.php';
      3. //导入全局成员类
      4. use xiaoyu\lib\Demo;
      5. $result = Demo::test();
      6. //导入全局成员接口
      7. require 'demo2.php';
      8. use xiaoyu\api\iTest;
      9. class Demo1 implements iTest
      10. {
      11. public static function test()
      12. {
      13. return class_implements(self::class);
      14. }
      15. }
      16. $result = Demo1::test();
      17. //导入全局成员常量
      18. //导入常量和函数的时候需要在use 后面声明一下是 const还是function
      19. require 'demo3.php';
      20. use const xiaoyu\define\MY_SITE;
      21. $result = MY_SITE;
      22. //导入全局成员函数
      23. require 'demo4.php';
      24. use function xiaoyu\fun\myfun;
      25. $result = myfun();
      26. echo '<pre>'.print_r($result,true).'<pre/>';

      导入别名方式

      1. namespace xiaoyu;
      2. //别名引用
      3. require 'demo2.php';
      4. use xiaoyu\api\iTest as Test;
      5. class Demo implements Test
      6. {
      7. public static function test()
      8. {
      9. return class_implements(self::class);
      10. }
      11. }
      12. $result = Demo::test();
      13. echo '<pre>'.print_r($result,true).'<pre/>';

      USE解决啥?

      use导入功能,由它所导入的类,接口,函数,常量,可以在使用时避免书写冗长的完全限定名称,可以直接书写类名等等,use导入命名空间可以解决重复命名,use导入别名,也能解决命名重复的问题

      ::class为什么比namespace好用

      答:前者能返回具有完全限定名称的类名,后者只能返回当前命名空间。
      前者可以方便用于自动加载路径。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议