热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

0210命名空间与全局成员导入

命名空间-

命名空间

-命名空间需要在PHP版本5.3以上才可以使用。
-命名空间:它规范了全局成员的声明与访问方式,规范了全局成员的命名方式与命名冲突的解决方案,它借鉴了传统的使·用目录管理文件的方式,来管理程序汇总的全局成员。
-全局成员包括:类,接口,函数,常量。(变量不在此列,变量受到’作用域’的限制)


常用关键字与常量

namespace:创建一个命名空间,必须写在脚本的第一样。(可以理解为新建一个文件夹并给文件夹命名)
__NAMESPACE__:魔术常量,返回当前命名空间的名称(可以理解为返回根目录的名称)
__CLASS__:返回的是一个‘完全限定名称’的类名
__FUNCTION__:返回的是一个‘完全限定名称’的函数名
完全限定名称:可以理解成绝对路径
限定名称:可以理解为相对路径
1.类的调用
例:创建两个PHP文件,demo1.php与demo2.php
demo1命名为ONE

  1. php
  2. //命名空间必须写在第一行
  3. namespace ONE;
  4. // 引入demo2
  5. require 'demo2.php';
  6. // 非限定名称访问,类名称前只要没有'\'都算非限定名称(可以理解为访问当前所在目录下的数据,就是非限定名称访问)
  7. // 访问demo文件里,命名空间同为ONE下面的类并赋值
  8. $result = Demo::Info();
  9. //输出结果
  10. echo '

    '.print_r($result,true).'';

demo2

  1. php
  2. //创建命名空间同为ONE
  3. namespace ONE;
  4. class Demo
  5. {
  6. public static function Info() : array
  7. {
  8. return [
  9. // 查看当前命名空间的名称
  10. 'name'=>__NAMESPACE__,
  11. //查看当前类的绝对路径以及名称
  12. 'class'=>__CLASS__,
  13. //查看当前类调用的方法的绝对路径以及方法名称
  14. 'method'=>__METHOD__
  15. ];
  16. }
  17. }



2.接口的调用
例:创建一个demo3.php文件

  1. php
  2. // 创建一个命名空间,根目录同为ONE,但是有子目录a与a下面的api
  3. namespace ONE\a\api;
  4. // 创建一个接口
  5. interface iTest
  6. {
  7. public static function Hello();
  8. }

demo1.php

  1. php
  2. //使用完全限定名称访问
  3. // 可以理解为iTest接口在,ONE文件夹下A文件夹下API文件夹里面,引用的demo3文件与当前文件命名空间都在ONE,ONE可以省略
  4. class Sub implements \ONE\a\api\iTest
  5. {
  6. public static function Hello()
  7. {
  8. // 返回当前类的完全限定类名
  9. return self::class;
  10. }
  11. }
  12. $result = Sub::Hello();
  13. echo '

    '.print_r($result,true).'';




3.函数的调用
例:在demo3里面再创建一个函数

  1. php
  2. namespace ONE\a\api;
  3. function hello(){
  4. return __FUNCTION__;
  5. }

demo1

  1. php
  2. //命名空间必须写在第一行
  3. namespace ONE;
  4. require 'demo3.php';
  5. //调用demo3里面的函数hello
  6. echo '返回的是当前函数的绝对路径以及函数的名称'.a\api\hello();
  7. //路径过长,可以使用use进行导入,把hello函数导入到当前命名空间
  8. // 注意导入函数的时候要使用function进行限定,表示当前导入的数据为函数
  9. use function ONE\a\api\hello;
  10. echo '
    '
    ;
  11. //非限定名称访问
  12. echo '直接访问'.hello();



4.常量的调用
例:在demo3里面创建一个常量

  1. php
  2. namespace ONE\a\api;
  3. const INFO = 'HELLO WORLD';
  4. define('NAME','WORLD');

demo1

  1. php
  2. //命名空间必须写在第一行
  3. namespace ONE;
  4. require 'demo3.php';
  5. // 使用use导入demo3里面的常量INFO,常量导入的时候必须要使用const,限定导入的内容为常量
  6. use const ONE\a\api\INFO;
  7. //使用完全限定名称访问
  8. echo a\api\INFO;
  9. echo '
    '
    ;
  10. //非限定名称访问
  11. echo '直接访问:'. INFO;
  12. echo '
    '
    ;
  13. //访问define创建的常量,define创建的常量不受命名空间影响
  14. echo NAME;

USE使用注意事项:
1.导入类与接口不需要限定词,但是导入函数与常量的时候需要在USE后加入限定词,函数限定词为function,常量限定词为const,define创建的常量不受命名空间影响。
2.经过USE导入后,可以理解为受导入的数据,已经存在于当前命名空间下,可以使用非限定名称访问(直接访问),如果受导入的数据与当前命名空间下的数据有命名冲突,可以使用AS给受导入的数据取一个别名,防止命名冲突。
3.USE并不能代替requireinclude,在使用USE前还是需要使用require或者include引用PHP文件。

例(把上面demo3的函数hello使用as关键字把名称改为world)

  1. php
  2. //命名空间必须写在第一行
  3. namespace ONE;
  4. require 'demo3.php';
  5. //调用demo3里面的函数hello
  6. echo '返回的是当前函数的绝对路径以及函数的名称'.a\api\hello();
  7. //路径过长,可以使用use进行导入,把hello函数导入到当前命名空间
  8. // 注意导入函数的时候要使用function进行限定,表示当前导入的数据为函数
  9. use function ONE\a\api\hello as world;
  10. echo '
    '
    ;
  11. //非限定名称访问
  12. echo '直接访问'.world();

图(最终输出的结果是一样的)

::class操作符与常量NAMESPACE的区别

  1. php
  2. namespace ONE\a\api;
  3. class Demo1
  4. {
  5. public static function AAA()
  6. {
  7. return __NAMESPACE__;
  8. }
  9. }
  10. echo '常量NAMESPACE返回值:'.Demo1::AAA();
  11. echo '
    '
    ;
  12. echo 'class操作符返回值:'.Demo1::class;



个人理解为常量__NAMESPACE__主要用在空间路径的查找上,因为他返回值只会到路径,不会指向最终的数据名字,基于这个原理,可以拼接出只允许某些数据访问的判断语句
::class操作符返回的是完整的命名空间路径以及被查询的类名,此返回值可以允许被实例化操作,但是在实例化操作前需要在返回值前加上’\’,因为返回值到根目录,如果一个路劲带上了根目录,就要在最前面加上’\’。
最后,常量__NAMESPACE__作用在命名空间上, ::class操作符,作用在类上。


推荐阅读
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 如何在PyCharm中配置Python脚本的默认模板
    本文介绍如何在PyCharm中设置Python脚本的默认模板,以便每次创建新的.py文件时自动填充预设内容,提高开发效率。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • TCP协议中的可靠传输机制分析
    本文深入探讨了TCP协议如何通过滑动窗口和超时重传来确保数据传输的可靠性,同时介绍了流量控制和拥塞控制的基本原理及其在实际网络通信中的应用。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
author-avatar
549696530_c1f5e8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有