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


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
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社区 版权所有