热门标签 | 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操作符,作用在类上。


推荐阅读
  • 使用Nginx反向代理实现多域名端口映射
    本文介绍如何通过配置本地hosts文件和Nginx反向代理,实现多个虚拟域名的端口映射,使用户可以通过标准HTTP端口80访问不同后端服务。 ... [详细]
  • 12月16日JavaScript变量、函数、流程、循环等***线上九期班
    12月16日JavaScript变量、函数、流程、循环等***线上九期班 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 使用Powershell Studio快速构建GUI应用程序
    本文介绍了如何利用Powershell Studio创建功能强大的可视化界面。相较于传统的开发工具,Powershell Studio提供了更为简便和高效的开发体验,尤其适合需要快速构建图形用户界面(GUI)的场景。 ... [详细]
  • 使用PHP实现网站访客计数器的完整指南
    本文详细介绍了如何利用PHP构建一个简易的网站访客统计系统。通过具体的代码示例和详细的解释,帮助开发者理解和实现这一功能,适用于初学者和有一定经验的开发人员。 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • PHP 实现多级树形结构:构建无限层级分类系统
    在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ... [详细]
  • This article explains how to check if a given string consists solely of English characters, including letters and numbers. It provides a practical PHP function for this purpose. ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • 本文深入探讨了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过详细解释AOP的核心术语和实现机制,帮助读者理解如何利用AOP提高代码的可维护性和开发效率。 ... [详细]
  • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
  • 本文详细介绍了在 Windows 7 系统中配置 Nginx 1.10.3 和 PHP 7.1.1 NTS 的步骤,包括修改 PHP 配置文件、处理依赖项以及创建批处理脚本启动和停止服务。重点解释了如何解决常见的运行时错误。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
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社区 版权所有